Coverage for src/bluetooth_sig/types/descriptor_types.py: 90%

20 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-30 00:10 +0000

1"""Data types for Bluetooth SIG descriptors.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7import msgspec 

8 

9from .base_types import SIGInfo 

10from .uuid import BluetoothUUID 

11 

12 

13class DescriptorInfo(SIGInfo): 

14 """Information about a Bluetooth descriptor.""" 

15 

16 # Descriptors may have structured data parsing requirements 

17 has_structured_data: bool = False 

18 data_format: str = "" # e.g., "uint16", "struct", etc. 

19 

20 

21class DescriptorData(msgspec.Struct, kw_only=True): 

22 """Parsed descriptor data with validation results.""" 

23 

24 info: DescriptorInfo 

25 value: Any | None = None 

26 raw_data: bytes = b"" 

27 parse_success: bool = False 

28 error_message: str = "" 

29 

30 @property 

31 def name(self) -> str: 

32 """Get the descriptor name from info.""" 

33 return self.info.name 

34 

35 @property 

36 def uuid(self) -> BluetoothUUID: 

37 """Get the descriptor UUID from info.""" 

38 return self.info.uuid