MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / StructBytesModel

Class StructBytesModel

projects/Python/proto/test.py:8788–8861  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8786
8787# Fast Binary Encoding StructBytes model
8788class StructBytesModel(fbe.Model):
8789 __slots__ = "_model",
8790
8791 def __init__(self, buffer=None):
8792 super().__init__(buffer)
8793 self._model = FieldModelStructBytes(self.buffer, 4)
8794
8795 @property
8796 def model(self):
8797 return self._model
8798
8799 # Get the model size
8800 @property
8801 def fbe_size(self):
8802 return self._model.fbe_size + self._model.fbe_extra
8803
8804 # Get the model type
8805 @property
8806 def fbe_type(self):
8807 return self.TYPE
8808
8809 TYPE = FieldModelStructBytes.TYPE
8810
8811 # Check if the struct value is valid
8812 def verify(self):
8813 if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size:
8814 return False
8815
8816 fbe_full_size = self.read_uint32(self._model.fbe_offset - 4)
8817 if fbe_full_size < self._model.fbe_size:
8818 return False
8819
8820 return self._model.verify()
8821
8822 # Create a new model (begin phase)
8823 def create_begin(self):
8824 fbe_begin = self.buffer.allocate(4 + self._model.fbe_size)
8825 return fbe_begin
8826
8827 # Create a new model (end phase)
8828 def create_end(self, fbe_begin):
8829 fbe_end = self.buffer.size
8830 fbe_full_size = fbe_end - fbe_begin
8831 self.write_uint32(self._model.fbe_offset - 4, fbe_full_size)
8832 return fbe_full_size
8833
8834 # Serialize the struct value
8835 def serialize(self, value):
8836 fbe_begin = self.create_begin()
8837 self._model.set(value)
8838 fbe_full_size = self.create_end(fbe_begin)
8839 return fbe_full_size
8840
8841 # Deserialize the struct value
8842 def deserialize(self, value=None):
8843 if value is None:
8844 value = StructBytes()
8845

Callers 1

cloneMethod · 0.70

Calls

no outgoing calls

Tested by 1

cloneMethod · 0.56