o
    `gj                     @   sL   d Z ddlmZ ddlmZmZmZmZ G dd deZG dd deZ	dS )	zR
hyperframe/flags
~~~~~~~~~~~~~~~~

Defines basic Flag and Flags data structures.
    )
MutableSet)
NamedTupleIterableSetIteratorc                   @   s   e Zd ZU eed< eed< dS )FlagnamebitN)__name__
__module____qualname__str__annotations__int r   r   K/var/www/html/propose/venv/lib/python3.10/site-packages/hyperframe/flags.pyr      s   
 r   c                   @   s   e Zd ZdZdee fddZdefddZde	de
fd	d
Zdee fddZdefddZdeddfddZdeddfddZdS )Flagsz
    A simple MutableSet implementation that will only accept known flags as
    elements.

    Will behave like a regular set(), except that a ValueError will be thrown
    when .add()ing unexpected flags.
    defined_flagsc                 C   s    t dd |D | _t  | _d S )Nc                 s   s    | ]}|j V  qd S N)r   ).0flagr   r   r   	<genexpr>   s    z!Flags.__init__.<locals>.<genexpr>)set_valid_flags_flags)selfr   r   r   r   __init__   s   zFlags.__init__returnc                 C   s   t tt| jS r   )reprsortedlistr   r   r   r   r   __repr__   s   zFlags.__repr__xc                 C      | j |S r   )r   __contains__)r   r#   r   r   r   r%          zFlags.__contains__c                 C   
   | j  S r   )r   __iter__r!   r   r   r   r(   #      
zFlags.__iter__c                 C   r'   r   )r   __len__r!   r   r   r   r*   &   r)   zFlags.__len__valueNc                 C   r$   r   )r   discardr   r+   r   r   r   r,   )   r&   zFlags.discardc                 C   s(   || j vrtd|| j | j|S )Nz(Unexpected flag: {}. Valid flags are: {})r   
ValueErrorformatr   addr-   r   r   r   r0   ,   s   
z	Flags.add)r
   r   r   __doc__r   r   r   r   r"   objectboolr%   r   r(   r   r*   r,   r0   r   r   r   r   r      s    r   N)
r1   collections.abcr   typingr   r   r   r   r   r   r   r   r   r   <module>   s
   