File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -177,22 +177,21 @@ VarStr.from_bytes_exact(b'\x03ABC')
177177# )
178178```
179179
180- Here's an example that combines all of the above concepts into a single
181- bitfield: a bitfield that contains a dynamically-sized list of ` WeatherPacket `
182- bitfields!
180+ The ` dynamic_field ` combinator is also useful for defining optional fields:
183181
184- ``` python
182+ ```` python
185183from __future__ import annotations
186184import bydantic as bd
187185
188- def discriminator (field : WeatherPacketList) -> bd.Field[list[WeatherPacket]]:
189- return bd.list_field(
190- bd.bitfield_field(WeatherPacket), field.n_packets
191- )
186+ def discriminator (field : OptionalField) -> bd.Field[bytes | None ]:
187+ if field.has_values:
188+ return bd.bytes_field(n_bytes = 8 )
189+ else :
190+ return None
192191
193- class WeatherPacketList (bd .BitField ):
194- n_packets: int = bd.uint_field( 8 )
195- packets: list[WeatherPacket] = bd.dynamic_field(discriminator)
192+ class OptionalField (bd .Bitfield ):
193+ has_values: bool = bd.bool_field( )
194+ values: bytes | None = bd.dynamic_field(discriminator)
196195```
197196
198197# # `dynamic_field` (discriminator variation 2)
@@ -224,7 +223,7 @@ def discriminator(
224223
225224class FancyDynamic (bd .Bitfield ):
226225 value: ChildField | bytes = bd.dynamic_field(discriminator)
227- ```
226+ ````
228227
229228Here's some deserialization examples of the ` FancyDynamic ` bitfield:
230229
You can’t perform that action at this time.
0 commit comments