Coverage for kv4p/messages/hello.py: 94%
16 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-13 13:27 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-13 13:27 +0000
1"""HELLO handshake payload."""
3from __future__ import annotations
5from dataclasses import dataclass
7from kv4p.messages.device_state import DEVICE_STATE_SIZE, DeviceState
8from kv4p.messages.version import Version
11@dataclass(frozen=True, slots=True)
12class Hello:
13 """HELLO payload."""
15 version: Version
16 device_state: DeviceState
18 @classmethod
19 def from_bytes(cls, payload: bytes) -> Hello:
20 """Parse HELLO."""
21 state_offset = len(payload) - DEVICE_STATE_SIZE
22 if state_offset <= 0:
23 raise ValueError(f"HELLO payload too short: {len(payload)}")
24 version = Version.from_bytes(payload[:state_offset])
25 device_state = DeviceState.from_bytes(payload[state_offset:])
26 return cls(version, device_state)