U
    ׀dI                     @   s   d Z ddlZddlmZmZmZ G dd dejZdd ZG dd	 d	ej	Z
G d
d deZdd Zdd Zdd Zdd ZdS )z
Python3.5+ specific utilities
    N)utilscommoncompatc                   @   s   e Zd ZdZdd ZdS )utf8reader_asynczf
    Takes a utf8-encoded string asynchronous reader and asynchronously reads
    bytes out of it
    c                    s   | j |I d H }|dS )Nzutf-8)
str_readerreadencode)selfndata r   l/mounts/lovelace/software/anaconda3/envs/qiime2-amplicon-2024.2/lib/python3.8/site-packages/ijson/utils35.pyr      s    zutf8reader_async.readN)__name__
__module____qualname____doc__r   r   r   r   r   r   	   s   r   c                    s0   t | dI dH tjkr | jS tt| jS )z@Returns an awaitable read function that reads the requested typer   N)typer   r   bytetype_warn_and_returnr   )fr   r   r   	_get_read   s    r   c                   @   s   e Zd ZdZejjZdS )sendable_dequez/Like utils.sendable_list, but for deque objectsN)r   r   r   r   collectionsdequeappendsendr   r   r   r   r      s   r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	async_iterablez
    A utility class that implements an async iterator returning values
    dispatched by a coroutine pipeline after *it* has received values coming
    from an async file-like object.
    c                 G   s8   t  | _tj| jf| | _d| _|| _|| _d | _d S )NF)	r   eventsr   chaincorocoro_finishedr   buf_sizer   )r	   r   r!   coro_pipeliner   r   r   __init__#   s    zasync_iterable.__init__c                 C   s   | S Nr   )r	   r   r   r   	__aiter__+   s    zasync_iterable.__aiter__c                    s   | j st| jI d H | _ | jr(| j S | jr2t|  | jI d H }z"| j	| | jrd| j W S W q2 t
k
r   d| _| jr| j  Y S tY q2X q2d S )NT)r   r   r   r   popleftr    StopAsyncIterationr!   r   r   StopIteration)r	   r   r   r   r   	__anext__.   s     
zasync_iterable.__anext__N)r   r   r   r   r#   r%   r)   r   r   r   r   r      s   r   c                    s   d fdd	}|S )N   c                    s   t | |ft | S r$   )r   r   _basic_parse_pipeliner   r!   configbackendr   r   basic_parse_asyncC   s    
z2_make_basic_parse_async.<locals>.basic_parse_async)r*   r   )r/   r0   r   r.   r   _make_basic_parse_asyncB   s    r1   c                    s   d fdd	}|S )Nr*   c                    s   t | |ft | S r$   )r   r   _parse_pipeliner,   r.   r   r   parse_asyncJ   s    
z&_make_parse_async.<locals>.parse_async)r*   r   )r/   r3   r   r.   r   _make_parse_asyncI   s    r4   c                    s   d fdd	}|S )Nr*   c                    s   t | |ft ||| S r$   )r   r   _items_pipeliner   prefixmap_typer!   r-   r.   r   r   items_asyncQ   s    z&_make_items_async.<locals>.items_async)Nr*   r   )r/   r9   r   r.   r   _make_items_asyncP   s    r:   c                    s   d fdd	}|S )Nr*   c                    s   t | |ft ||| S r$   )r   r   _kvitems_pipeliner6   r.   r   r   kvitems_asyncX   s    z*_make_kvitems_async.<locals>.kvitems_async)Nr*   r   )r/   r<   r   r.   r   _make_kvitems_asyncW   s    r=   )r   r   ijsonr   r   r   
utf8readerr   r   r   r   objectr   r1   r4   r:   r=   r   r   r   r   <module>   s   	&