o
    Ti+                     @   s$  d Z ddlmZmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZ ddlmZmZ d	d
lmZ d	dlmZmZmZ d	dlmZ d	dlmZ d	dlmZ d	dlm Z  ddl!m"Z"m#Z#m$Z$ g dZ%edZ&G dd deZ'deddfddZ(e$e'dedede'fddZ)dS )z$Preconfigured converters for orjson.    )	b85decode	b85encode)Set)datedatetime)Enum)partial)AnyTypeVarUnion)dumpsloads   )is_subclass)
is_mappingis_namedtuplenamedtuple_unstructure_factory)	Converteridentity)is_literal_containing_enums)configure_union_passthrough   )is_primitive_enum'literals_with_enums_unstructure_factorywrap)OrjsonConverterconfigure_convertermake_converterTc                	   @   sN   e Zd ZddedededefddZdeeeee	f d	e
e defd
dZdS )r   Nobjunstructure_askwargsreturnc                 K   s   t | j||dfi |S )N)r!   )r   unstructure)selfr    r!   r"    r&   I/home/ubuntu/.local/lib/python3.10/site-packages/cattrs/preconf/orjson.pyr      s   zOrjsonConverter.dumpsdataclc                 C   s   |  t||S N)	structurer   )r%   r(   r)   r&   r&   r'   r      s   zOrjsonConverter.loadsr*   )__name__
__module____qualname__r	   bytesr   r   	bytearray
memoryviewstrtyper   r   r&   r&   r&   r'   r      s    *r   	converterr#   Nc                    s     tdd   tdd   tdd   tdd  ddtf fdd	} jt|d
ft	t
ttddfg  t
td
ddd   tt ttttttdf   dS )a  
    Configure the converter for use with the orjson library.

    * bytes are serialized as base85 strings
    * datetimes and dates are passed through to be serialized as RFC 3339 by orjson
    * typed namedtuples are serialized as lists
    * sets are serialized as lists
    * string enum mapping keys have special handling
    * mapping keys are coerced into strings when unstructuring
    * bare, string and int enums are passed through when unstructuring

    .. versionchanged:: 24.1.0
        Add support for typed namedtuples.
    .. versionchanged:: 24.2.0
        Enums are left to the library to unstructure, speeding them up.
    c                 S   s   | r	t | dS ddS )N    utf8)r   decodevr&   r&   r'   <lambda>3   s    z%configure_converter.<locals>.<lambda>c                 S   s   t | S r*   )r   r9   _r&   r&   r'   r:   5   s    c                 S   
   t | S r*   )r   fromisoformatr;   r&   r&   r'   r:   7      
 c                 S   r=   r*   )r   r>   r;   r&   r&   r'   r:   8   r?   Nr)   c                    sd   t }t| dd }|r*t|d t rt|d trdd }n |d }|tkr*|} j| ||dS )N__args__r   c                 S   s   | j S r*   )valuer8   r&   r&   r'   key_handler@   s   zMconfigure_converter.<locals>.unstructure_mapping_factory.<locals>.key_handler)unstructure_torB   )r2   getattrr   r   get_unstructure_hookr   gen_unstructure_mapping)r)   rC   rB   argskhr4   r&   r'   unstructure_mapping_factory:   s   
z8configure_converter.<locals>.unstructure_mapping_factoryT)rC   extended)include_bare_enumsc                 S   s   t S r*   r   )tr&   r&   r'   r:   [   s    r*   )register_unstructure_hookr/   register_structure_hookr   r   r	   _unstructure_funcregister_func_listr   r   r   r   tuple!register_unstructure_hook_factoryr   r   r   r   r   r2   boolintfloat)r4   rJ   r&   rI   r'   r   !   s,   

r   rG   r"   c                  O   s2   t ti|di |d< t| i |}t| |S )Nunstruct_collection_overrides)r   listgetr   r   )rG   r"   resr&   r&   r'   r   c   s   
r   )*__doc__base64r   r   collections.abcr   r   r   enumr   	functoolsr   typingr	   r
   r   orjsonr   r   _compatr   colsr   r   r   
convertersr   fnsr   literalsr   
strategiesr    r   r   r   __all__r   r   r   r   r&   r&   r&   r'   <module>   s*    B