Coverage for src/bluetooth_sig/types/context.py: 100%
16 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-30 00:10 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-30 00:10 +0000
1"""Context objects used during characteristic parsing."""
3from __future__ import annotations
5from collections.abc import Mapping
7import msgspec
9from .descriptor_types import DescriptorData
10from .protocols import CharacteristicDataProtocol
13class DeviceInfo(msgspec.Struct, kw_only=True):
14 """Basic device metadata available to parsers."""
16 address: str = ""
17 name: str = ""
18 manufacturer_data: dict[int, bytes] = msgspec.field(default_factory=dict)
19 service_uuids: list[str] = msgspec.field(default_factory=list)
22class CharacteristicContext(msgspec.Struct, kw_only=True):
23 """Runtime context passed into parsers.
25 Attributes:
26 device_info: Basic device metadata (address, name, manufacturer data).
27 advertisement: Raw advertisement bytes if available.
28 other_characteristics: Mapping from characteristic UUID string to
29 previously-parsed characteristic result (typical value is
30 `bluetooth_sig.core.CharacteristicData`). Parsers may consult this
31 mapping to implement multi-characteristic decoding.
32 descriptors: Mapping from descriptor UUID string to parsed descriptor data.
33 Provides access to characteristic descriptors during parsing.
34 raw_service: Optional raw service-level payload when applicable.
36 """
38 device_info: DeviceInfo | None = None
39 advertisement: bytes = b""
40 other_characteristics: Mapping[str, CharacteristicDataProtocol] | None = None
41 descriptors: Mapping[str, DescriptorData] | None = None
42 raw_service: bytes = b""