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

1"""HELLO handshake payload.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6 

7from kv4p.messages.device_state import DEVICE_STATE_SIZE, DeviceState 

8from kv4p.messages.version import Version 

9 

10 

11@dataclass(frozen=True, slots=True) 

12class Hello: 

13 """HELLO payload.""" 

14 

15 version: Version 

16 device_state: DeviceState 

17 

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)