Coverage for zenmqtt/mqtt/utils.py: 100%
22 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-12 21:55 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-12 21:55 +0000
1import struct
3from zenmqtt.mqtt.packet import PacketType
6def pack_variable_byte_integer(value: int) -> bytearray:
7 result = bytearray()
9 while True:
10 value, remainder = divmod(value, 0x80)
12 if value > 0:
13 remainder |= 0x80
15 result.extend(struct.pack("!B", remainder))
17 if value <= 0:
18 break
20 return result
23def pack_str16(value: str) -> bytes:
24 encoded = value.encode()
25 return pack_binary(encoded)
28def pack_binary(value: bytes) -> bytes:
29 return struct.pack(f"!H{len(value)}s", len(value), value)
32def pack_fixed_header(packet_type: PacketType, flags: int, length: int) -> bytes:
33 result = bytearray()
35 result.extend(struct.pack("!B", (packet_type << 4) | flags))
36 result.extend(pack_variable_byte_integer(length))
38 return bytes(result)