1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
from dataclasses import dataclass
from apischema import serialize
from apischema.conversions import Conversion, LazyConversion
@dataclass
class Foo:
elements: list["int | Foo"]
def foo_elements(foo: Foo) -> list[int | Foo]:
return foo.elements
# Recursive conversion pattern
tmp = None
conversion = Conversion(foo_elements, sub_conversion=LazyConversion(lambda: tmp))
tmp = conversion
assert serialize(Foo, Foo([0, Foo([1])]), conversion=conversion) == [0, [1]]
# Without the recursive sub-conversion, it would have been:
assert serialize(Foo, Foo([0, Foo([1])]), conversion=foo_elements) == [
0,
{"elements": [1]},
]
|