| 12581 | |
| 12582 | # Fast Binary Encoding StructSet model |
| 12583 | class StructSetModel(fbe.Model): |
| 12584 | __slots__ = "_model", |
| 12585 | |
| 12586 | def __init__(self, buffer=None): |
| 12587 | super().__init__(buffer) |
| 12588 | self._model = FieldModelStructSet(self.buffer, 4) |
| 12589 | |
| 12590 | @property |
| 12591 | def model(self): |
| 12592 | return self._model |
| 12593 | |
| 12594 | # Get the model size |
| 12595 | @property |
| 12596 | def fbe_size(self): |
| 12597 | return self._model.fbe_size + self._model.fbe_extra |
| 12598 | |
| 12599 | # Get the model type |
| 12600 | @property |
| 12601 | def fbe_type(self): |
| 12602 | return self.TYPE |
| 12603 | |
| 12604 | TYPE = FieldModelStructSet.TYPE |
| 12605 | |
| 12606 | # Check if the struct value is valid |
| 12607 | def verify(self): |
| 12608 | if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size: |
| 12609 | return False |
| 12610 | |
| 12611 | fbe_full_size = self.read_uint32(self._model.fbe_offset - 4) |
| 12612 | if fbe_full_size < self._model.fbe_size: |
| 12613 | return False |
| 12614 | |
| 12615 | return self._model.verify() |
| 12616 | |
| 12617 | # Create a new model (begin phase) |
| 12618 | def create_begin(self): |
| 12619 | fbe_begin = self.buffer.allocate(4 + self._model.fbe_size) |
| 12620 | return fbe_begin |
| 12621 | |
| 12622 | # Create a new model (end phase) |
| 12623 | def create_end(self, fbe_begin): |
| 12624 | fbe_end = self.buffer.size |
| 12625 | fbe_full_size = fbe_end - fbe_begin |
| 12626 | self.write_uint32(self._model.fbe_offset - 4, fbe_full_size) |
| 12627 | return fbe_full_size |
| 12628 | |
| 12629 | # Serialize the struct value |
| 12630 | def serialize(self, value): |
| 12631 | fbe_begin = self.create_begin() |
| 12632 | self._model.set(value) |
| 12633 | fbe_full_size = self.create_end(fbe_begin) |
| 12634 | return fbe_full_size |
| 12635 | |
| 12636 | # Deserialize the struct value |
| 12637 | def deserialize(self, value=None): |
| 12638 | if value is None: |
| 12639 | value = StructSet() |
| 12640 | |