| 14613 | |
| 14614 | # Fast Binary Encoding StructHash model |
| 14615 | class StructHashModel(fbe.Model): |
| 14616 | __slots__ = "_model", |
| 14617 | |
| 14618 | def __init__(self, buffer=None): |
| 14619 | super().__init__(buffer) |
| 14620 | self._model = FieldModelStructHash(self.buffer, 4) |
| 14621 | |
| 14622 | @property |
| 14623 | def model(self): |
| 14624 | return self._model |
| 14625 | |
| 14626 | # Get the model size |
| 14627 | @property |
| 14628 | def fbe_size(self): |
| 14629 | return self._model.fbe_size + self._model.fbe_extra |
| 14630 | |
| 14631 | # Get the model type |
| 14632 | @property |
| 14633 | def fbe_type(self): |
| 14634 | return self.TYPE |
| 14635 | |
| 14636 | TYPE = FieldModelStructHash.TYPE |
| 14637 | |
| 14638 | # Check if the struct value is valid |
| 14639 | def verify(self): |
| 14640 | if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size: |
| 14641 | return False |
| 14642 | |
| 14643 | fbe_full_size = self.read_uint32(self._model.fbe_offset - 4) |
| 14644 | if fbe_full_size < self._model.fbe_size: |
| 14645 | return False |
| 14646 | |
| 14647 | return self._model.verify() |
| 14648 | |
| 14649 | # Create a new model (begin phase) |
| 14650 | def create_begin(self): |
| 14651 | fbe_begin = self.buffer.allocate(4 + self._model.fbe_size) |
| 14652 | return fbe_begin |
| 14653 | |
| 14654 | # Create a new model (end phase) |
| 14655 | def create_end(self, fbe_begin): |
| 14656 | fbe_end = self.buffer.size |
| 14657 | fbe_full_size = fbe_end - fbe_begin |
| 14658 | self.write_uint32(self._model.fbe_offset - 4, fbe_full_size) |
| 14659 | return fbe_full_size |
| 14660 | |
| 14661 | # Serialize the struct value |
| 14662 | def serialize(self, value): |
| 14663 | fbe_begin = self.create_begin() |
| 14664 | self._model.set(value) |
| 14665 | fbe_full_size = self.create_end(fbe_begin) |
| 14666 | return fbe_full_size |
| 14667 | |
| 14668 | # Deserialize the struct value |
| 14669 | def deserialize(self, value=None): |
| 14670 | if value is None: |
| 14671 | value = StructHash() |
| 14672 | |