o
    èÅbI
  ã                   @  s¬   d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 er*d dlmZ d dlmZ d!d
d„Zd"dd„Zd#dd„Zd$dd„Zd%dd„Zd&dd„ZG dd	„ d	eeef ƒZd S )'é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚDictÚMappingÚUnionÚcast)ÚDATA_LIB_KEY)ÚType)ÚGenConverterÚvalueúMapping[str, Any]ÚreturnÚLibc                 C  s   t | tƒr| S t| ƒS ©N)Ú
isinstancer   ©r   © r   ú5/usr/lib/python3/dist-packages/ufoLib2/objects/lib.pyÚ_convert_Lib   s   r   Úselfr   c                 C  s   t t| jƒS r   )r   r   Ú_lib)r   r   r   r   Ú_get_lib   s   r   ÚNonec                 C  s   t |ƒ| _d S r   )r   r   )r   r   r   r   r   Ú_set_lib"   s   r   Úboolc                 C  s&   t | tƒod| v o| d tkod| v S )NÚtypeÚdata)r   r   r	   r   r   r   r   Úis_data_dict&   s   
ÿ
þür   Ú	converterr   c                   s^   t | tƒrtˆ  | ¡dœS t | ttfƒr‡ fdd„| D ƒS t | tƒr-‡ fdd„|  ¡ D ƒS | S )N)r   r   c                   s   g | ]}t |ˆ ƒ‘qS r   ©Ú_unstructure_data)Ú.0Úv©r   r   r   Ú
<listcomp>3   s    z%_unstructure_data.<locals>.<listcomp>c                   s   i | ]
\}}|t |ˆ ƒ“qS r   r    )r"   Úkr#   r$   r   r   Ú
<dictcomp>5   s    z%_unstructure_data.<locals>.<dictcomp>)r   Úbytesr	   ÚunstructureÚlistÚtupler   Úitems)r   r   r   r$   r   r!   /   s   

r!   ÚkeyúUnion[int, str]Ú	containerc                 C  s€   t |tƒrt|ƒD ]\}}t||||ƒ q	d S t|ƒr'| |d t¡|| < d S t |tƒr<| ¡ D ]\}}t||||ƒ q0d S d S )Nr   )	r   r*   Ú	enumerateÚ_structure_data_inplacer   Z	structurer(   r   r,   )r-   r   r/   r   Úir#   r&   r   r   r   r1   9   s   
ÿ
þr1   c                   @  s$   e Zd Zddd„Zeddd„ƒZdS )r   r   r   r   údict[str, Any]c                 C  s@   |  d¡}t|tƒrt| ƒS t|tƒstt|ƒƒ‚t| |ƒ}|S )Nó    )r)   r   r(   ÚdictÚstrÚNotImplementedErrorr   r!   )r   r   Útestr   r   r   r   Ú_unstructureG   s   



zLib._unstructurer   r   Úclsú	Type[Lib]c                 C  s,   || ƒ}|  ¡ D ]\}}t||||ƒ q|S r   )r,   r1   )r   r:   r   r   r&   r#   r   r   r   Ú
_structureR   s   zLib._structureN)r   r   r   r3   )r   r   r:   r;   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r9   Ústaticmethodr<   r   r   r   r   r   F   s    
N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )
r-   r.   r   r   r/   r   r   r   r   r   )Z
__future__r   Útypingr   r   r   r   r   r   ZufoLib2.constantsr	   r
   Zcattrr   r   r   r   r   r!   r1   r6   r   r   r   r   r   Ú<module>   s     




	

