"""Preconfigured converters for cbor2."""fromcollections.abcimportSetfromdatetimeimportdate,datetime,timezonefromtypingimportAny,TypeVar,Unionfromcbor2importdumps,loadsfrom..convertersimportBaseConverter,Converterfrom..fnsimportidentityfrom..literalsimportis_literal_containing_enumsfrom..strategiesimportconfigure_union_passthroughfrom.importis_primitive_enum,literals_with_enums_unstructure_factory,wrapT=TypeVar("T")
[docs]defconfigure_converter(converter:BaseConverter):""" Configure the converter for use with the cbor2 library. * datetimes are serialized as timestamp floats * sets are serialized as lists * string and int enums are passed through when unstructuring """converter.register_unstructure_hook(datetime,lambdav:v.timestamp())converter.register_structure_hook(datetime,lambdav,_:datetime.fromtimestamp(v,timezone.utc))converter.register_unstructure_hook(date,lambdav:v.isoformat())converter.register_structure_hook(date,lambdav,_:date.fromisoformat(v))converter.register_unstructure_hook_factory(is_primitive_enum,lambdat:identity)converter.register_unstructure_hook_factory(is_literal_containing_enums,literals_with_enums_unstructure_factory)configure_union_passthrough(Union[str,bool,int,float,None,bytes],converter)