| 13511 | |
| 13512 | # Fast Binary Encoding StructMap model |
| 13513 | class StructMapModel(fbe.Model): |
| 13514 | __slots__ = "_model", |
| 13515 | |
| 13516 | def __init__(self, buffer=None): |
| 13517 | super().__init__(buffer) |
| 13518 | self._model = FieldModelStructMap(self.buffer, 4) |
| 13519 | |
| 13520 | @property |
| 13521 | def model(self): |
| 13522 | return self._model |
| 13523 | |
| 13524 | # Get the model size |
| 13525 | @property |
| 13526 | def fbe_size(self): |
| 13527 | return self._model.fbe_size + self._model.fbe_extra |
| 13528 | |
| 13529 | # Get the model type |
| 13530 | @property |
| 13531 | def fbe_type(self): |
| 13532 | return self.TYPE |
| 13533 | |
| 13534 | TYPE = FieldModelStructMap.TYPE |
| 13535 | |
| 13536 | # Check if the struct value is valid |
| 13537 | def verify(self): |
| 13538 | if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size: |
| 13539 | return False |
| 13540 | |
| 13541 | fbe_full_size = self.read_uint32(self._model.fbe_offset - 4) |
| 13542 | if fbe_full_size < self._model.fbe_size: |
| 13543 | return False |
| 13544 | |
| 13545 | return self._model.verify() |
| 13546 | |
| 13547 | # Create a new model (begin phase) |
| 13548 | def create_begin(self): |
| 13549 | fbe_begin = self.buffer.allocate(4 + self._model.fbe_size) |
| 13550 | return fbe_begin |
| 13551 | |
| 13552 | # Create a new model (end phase) |
| 13553 | def create_end(self, fbe_begin): |
| 13554 | fbe_end = self.buffer.size |
| 13555 | fbe_full_size = fbe_end - fbe_begin |
| 13556 | self.write_uint32(self._model.fbe_offset - 4, fbe_full_size) |
| 13557 | return fbe_full_size |
| 13558 | |
| 13559 | # Serialize the struct value |
| 13560 | def serialize(self, value): |
| 13561 | fbe_begin = self.create_begin() |
| 13562 | self._model.set(value) |
| 13563 | fbe_full_size = self.create_end(fbe_begin) |
| 13564 | return fbe_full_size |
| 13565 | |
| 13566 | # Deserialize the struct value |
| 13567 | def deserialize(self, value=None): |
| 13568 | if value is None: |
| 13569 | value = StructMap() |
| 13570 | |