Coverage for src/certus/nodes/struct.py: 100%
33 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-04 09:44 +0100
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-04 09:44 +0100
1"""Node models for structured outputs."""
3import dataclasses
4import typing
6from .core import Composite, NodeType
9@dataclasses.dataclass(kw_only=True)
10class Array(Composite):
11 """
12 Node representing a JSON array.
14 Parameters
15 ----------
16 elements : list of NodeType
17 Ordered child nodes representing the array elements.
18 """
20 elements: list[NodeType] = dataclasses.field(default_factory=list)
22 def __post_init__(self) -> None:
23 self.children = self.elements
24 super().__post_init__()
26 def __getitem__(self, index: int) -> NodeType:
27 return self.elements[index]
29 def __iter__(self) -> typing.Iterator[NodeType]:
30 return iter(self.elements)
32 def __len__(self) -> int:
33 return len(self.elements)
35 def __repr__(self) -> str:
36 return f"{self.__class__.__name__}(elements={self.elements!r})"
39@dataclasses.dataclass(kw_only=True)
40class Object(Composite):
41 """
42 Node representing a JSON object.
44 Parameters
45 ----------
46 fields : dict[str, NodeType]
47 Mapping from field names to child nodes.
49 Attributes
50 ----------
51 fields : dict[str, NodeType]
52 Stored mapping of field names to parsed nodes.
53 """
55 fields: dict[str, NodeType] = dataclasses.field(default_factory=dict)
57 def __post_init__(self) -> None:
58 self.children = list(self.fields.values())
59 super().__post_init__()
61 def __getitem__(self, key: str) -> NodeType:
62 return self.fields[key]
64 def __repr__(self) -> str:
65 return f"{self.__class__.__name__}(fields={self.fields!r})"
67 def keys(self) -> typing.KeysView[str]:
68 """Return the object's field keys."""
69 return self.fields.keys()
71 def items(self) -> typing.ItemsView[str, NodeType]:
72 """Return the object's (key, node) pairs."""
73 return self.fields.items()
75 def values(self) -> typing.ValuesView[NodeType]:
76 """Return the object's field values."""
77 return self.fields.values()