Serializer implementation tools
Serializer implementation tools module.
- class easynetwork.serializers.tools.GeneratorStreamReader
Bases:
objectA binary stream-like object using an in-memory bytes buffer.
The “blocking” operation is done with the generator’s
yieldstatement. It is an helper for incremental serializer implementations.- read(size: int) Generator[None, bytes, bytes]
Read and return up to size bytes.
Example:
def incremental_deserialize(self) -> Generator[None, bytes, tuple[Packet, bytes]]: reader = GeneratorStreamReader() data: bytes = yield from reader.read(1024) # Get at most 1024 bytes. ...
- read_exactly(n: int) Generator[None, bytes, bytes]
Read exactly n bytes.
Example:
def incremental_deserialize(self) -> Generator[None, bytes, tuple[Packet, bytes]]: reader = GeneratorStreamReader() header: bytes = yield from reader.read_exactly(32) assert len(header) == 32 ...
- read_until(separator: bytes, limit: int, *, keep_end: bool = True) Generator[None, bytes, bytes]
Read data from the stream until separator is found.
On success, the data and separator will be removed from the internal buffer (consumed).
If the amount of data read exceeds limit, a
LimitOverrunErrorexception is raised, and the data is left in the internal buffer and can be read again.Example:
def incremental_deserialize(self) -> Generator[None, bytes, tuple[Packet, bytes]]: reader = GeneratorStreamReader() line: bytes = yield from reader.read_until(b"\r\n", limit=65535) assert line.endswith(b"\r\n") ...
- Parameters:
- Raises:
LimitOverrunError – Reached buffer size limit.
- Yields:
until separator is found in the buffer.
- Returns:
a
bytesobject.- Return type: