"""Preconfigured converters for cbor2."""
from collections.abc import Set
from datetime import date, datetime, timezone
from typing import Any, TypeVar, Union
from cbor2 import dumps, loads
from ..converters import BaseConverter, Converter
from ..fns import identity
from ..literals import is_literal_containing_enums
from ..strategies import configure_union_passthrough
from . import is_primitive_enum, literals_with_enums_unstructure_factory, wrap
T = TypeVar("T")
[docs]class Cbor2Converter(Converter):
[docs] def dumps(self, obj: Any, unstructure_as: Any = None, **kwargs: Any) -> bytes:
return dumps(self.unstructure(obj, unstructure_as=unstructure_as), **kwargs)
[docs] def loads(self, data: bytes, cl: type[T], **kwargs: Any) -> T:
return self.structure(loads(data, **kwargs), cl)
[docs]@wrap(Cbor2Converter)
def make_converter(*args: Any, **kwargs: Any) -> Cbor2Converter:
kwargs["unstruct_collection_overrides"] = {
Set: list,
**kwargs.get("unstruct_collection_overrides", {}),
}
res = Cbor2Converter(*args, **kwargs)
configure_converter(res)
return res