| 2174 | |
| 2175 | # Fast Binary Encoding Account model |
| 2176 | class AccountModel(fbe.Model): |
| 2177 | __slots__ = "_model", |
| 2178 | |
| 2179 | def __init__(self, buffer=None): |
| 2180 | super().__init__(buffer) |
| 2181 | self._model = FieldModelAccount(self.buffer, 4) |
| 2182 | |
| 2183 | @property |
| 2184 | def model(self): |
| 2185 | return self._model |
| 2186 | |
| 2187 | # Get the model size |
| 2188 | @property |
| 2189 | def fbe_size(self): |
| 2190 | return self._model.fbe_size + self._model.fbe_extra |
| 2191 | |
| 2192 | # Get the model type |
| 2193 | @property |
| 2194 | def fbe_type(self): |
| 2195 | return self.TYPE |
| 2196 | |
| 2197 | TYPE = FieldModelAccount.TYPE |
| 2198 | |
| 2199 | # Check if the struct value is valid |
| 2200 | def verify(self): |
| 2201 | if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size: |
| 2202 | return False |
| 2203 | |
| 2204 | fbe_full_size = self.read_uint32(self._model.fbe_offset - 4) |
| 2205 | if fbe_full_size < self._model.fbe_size: |
| 2206 | return False |
| 2207 | |
| 2208 | return self._model.verify() |
| 2209 | |
| 2210 | # Create a new model (begin phase) |
| 2211 | def create_begin(self): |
| 2212 | fbe_begin = self.buffer.allocate(4 + self._model.fbe_size) |
| 2213 | return fbe_begin |
| 2214 | |
| 2215 | # Create a new model (end phase) |
| 2216 | def create_end(self, fbe_begin): |
| 2217 | fbe_end = self.buffer.size |
| 2218 | fbe_full_size = fbe_end - fbe_begin |
| 2219 | self.write_uint32(self._model.fbe_offset - 4, fbe_full_size) |
| 2220 | return fbe_full_size |
| 2221 | |
| 2222 | # Serialize the struct value |
| 2223 | def serialize(self, value): |
| 2224 | fbe_begin = self.create_begin() |
| 2225 | self._model.set(value) |
| 2226 | fbe_full_size = self.create_end(fbe_begin) |
| 2227 | return fbe_full_size |
| 2228 | |
| 2229 | # Deserialize the struct value |
| 2230 | def deserialize(self, value=None): |
| 2231 | if value is None: |
| 2232 | value = Account() |
| 2233 | |