Coverage for src / dynapydantic / union_mode.py: 100%
8 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-17 17:07 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-17 17:07 +0000
1"""Union mode configuration types for dynapydantic."""
3import typing as ty
4from collections.abc import Callable
6import pydantic
9class DiscriminatedConfig(pydantic.BaseModel, frozen=True, extra="forbid"):
10 """Configuration for a discriminated union.
12 Carries the discriminator field name and optional value generator that
13 are required when pydantic's discriminated-union validation strategy is
14 used.
15 """
17 discriminator_field: str = pydantic.Field(
18 description="Name of the field used to discriminate between subtypes.",
19 )
20 discriminator_value_generator: Callable[[type], str] | None = pydantic.Field(
21 None,
22 description=(
23 "A callable that produces default values for the discriminator "
24 "field when none is supplied via register()."
25 ),
26 )
29#: Literal type for the two non-discriminated union strategies.
30NonDiscriminatedMode = ty.Literal["smart", "left_to_right"]
32#: Full union-mode type. Either a structured `DiscriminatedMode`
33#: (the default) or one of the plain string literals for the two
34#: non-discriminated strategies.
35UnionMode = DiscriminatedConfig | NonDiscriminatedMode