U
    ¤�©jK  ã                   @   sŒ   d dl mZmZ eefZdZeeef Z	de	edœdd„Z
de	edœdd„Zefee	eef eeee ef d	œd
d„ZddddddgZdS )é    )ÚListÚUnionúutf-8)ÚvalueÚreturnc                 C   sP   t | tƒr| S t | tƒrHz|  |¡W S  tk
rD   |  dd¡ Y S X n| S dS )zÕ
    Converts a value to bytes, even if it already is bytes
    :param value: The value to convert
    :param encoding: The encoding to use in the conversion
    :return: The bytes representation of the value
    r   ÚreplaceN)Ú
isinstanceÚbytesÚstrÚencodeÚUnicodeEncodeError©r   Úencoding© r   ú:/tmp/pip-unpacked-wheel-g40nyxg1/icalendar/parser_tools.pyÚfrom_unicode   s    

r   ú	utf-8-sigc                 C   sP   t | tƒr| S t | tƒrHz|  |¡W S  tk
rD   |  dd¡ Y S X n| S dS )zDConverts a value to unicode, even if it is already a unicode string.r   r   N)r   r
   r	   ÚdecodeÚUnicodeDecodeErrorr   r   r   r   Ú
to_unicode   s    

r   )Údatar   c                 C   s^   t | tƒr|  |¡S t | tƒr4tttt|  ¡ ƒƒƒS t | tƒsHt | t	ƒrVttt| ƒƒS | S dS )zsEncode all datastructures to the given encoding.
    Currently unicode strings, dicts and lists are supported.
    N)
r   r
   r   ÚdictÚmapÚdata_encodeÚiterÚitemsÚlistÚtuple)r   r   r   r   r   r   '   s    


r   ÚDEFAULT_ENCODINGÚSEQUENCE_TYPESÚ	ICAL_TYPEN)r   )r   )Útypingr   r   r   r   r   r   r
   r	   r    r   r   r   r   Ú__all__r   r   r   r   Ú<module>   s"   ÿþú