| 2057 | |
| 2058 | # Fast Binary Encoding Account model |
| 2059 | class AccountModel(fbe.Model): |
| 2060 | __slots__ = "_model", |
| 2061 | |
| 2062 | def __init__(self, buffer=None): |
| 2063 | super().__init__(buffer) |
| 2064 | self._model = FieldModelAccount(self.buffer, 4) |
| 2065 | |
| 2066 | @property |
| 2067 | def model(self): |
| 2068 | return self._model |
| 2069 | |
| 2070 | # Get the model size |
| 2071 | @property |
| 2072 | def fbe_size(self): |
| 2073 | return self._model.fbe_size + self._model.fbe_extra |
| 2074 | |
| 2075 | # Get the model type |
| 2076 | @property |
| 2077 | def fbe_type(self): |
| 2078 | return self.TYPE |
| 2079 | |
| 2080 | TYPE = FieldModelAccount.TYPE |
| 2081 | |
| 2082 | # Check if the struct value is valid |
| 2083 | def verify(self): |
| 2084 | if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size: |
| 2085 | return False |
| 2086 | |
| 2087 | fbe_full_size = self.read_uint32(self._model.fbe_offset - 4) |
| 2088 | if fbe_full_size < self._model.fbe_size: |
| 2089 | return False |
| 2090 | |
| 2091 | return self._model.verify() |
| 2092 | |
| 2093 | # Create a new model (begin phase) |
| 2094 | def create_begin(self): |
| 2095 | fbe_begin = self.buffer.allocate(4 + self._model.fbe_size) |
| 2096 | return fbe_begin |
| 2097 | |
| 2098 | # Create a new model (end phase) |
| 2099 | def create_end(self, fbe_begin): |
| 2100 | fbe_end = self.buffer.size |
| 2101 | fbe_full_size = fbe_end - fbe_begin |
| 2102 | self.write_uint32(self._model.fbe_offset - 4, fbe_full_size) |
| 2103 | return fbe_full_size |
| 2104 | |
| 2105 | # Serialize the struct value |
| 2106 | def serialize(self, value): |
| 2107 | fbe_begin = self.create_begin() |
| 2108 | self._model.set(value) |
| 2109 | fbe_full_size = self.create_end(fbe_begin) |
| 2110 | return fbe_full_size |
| 2111 | |
| 2112 | # Deserialize the struct value |
| 2113 | def deserialize(self, value=None): |
| 2114 | if value is None: |
| 2115 | value = Account() |
| 2116 | |