o
    հi7                     @   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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   A/home/ubuntu/.local/lib/python3.10/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kr| jS tt| jS )z@Returns an awaitable read function that reads the requested typer   N)typer   bytesr   _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   s:   t  | _tj| jg|R  | _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rt	 |  | jI d H }z| j	| | jr4| j W S W n t
yK   d| _| jrI| j  Y S tw q)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                       d fdd	}|S )N   c                       t | |gt |R  S r$   )r   r   _basic_parse_pipeliner   r!   configbackendr   r   basic_parse_asyncC      
z2_make_basic_parse_async.<locals>.basic_parse_asyncr+   r   )r1   r2   r   r0   r   _make_basic_parse_asyncB      r5   c                    r*   )Nr+   c                    r,   r$   )r   r   _parse_pipeliner.   r0   r   r   parse_asyncJ   r3   z&_make_parse_async.<locals>.parse_asyncr4   r   )r1   r8   r   r0   r   _make_parse_asyncI   r6   r9   c                    r*   )Nr+   c                       t | |gt |||R  S r$   )r   r   _items_pipeliner   prefixmap_typer!   r/   r0   r   r   items_asyncQ      z&_make_items_async.<locals>.items_asyncNr+   r   )r1   r?   r   r0   r   _make_items_asyncP   r6   rB   c                    r*   )Nr+   c                    r:   r$   )r   r   _kvitems_pipeliner<   r0   r   r   kvitems_asyncX   r@   z*_make_kvitems_async.<locals>.kvitems_asyncrA   r   )r1   rD   r   r0   r   _make_kvitems_asyncW   r6   rE   )r   r   ijsonr   r   r   
utf8readerr   r   r   r   r   r5   r9   rB   rE   r   r   r   r   <module>   s    	&