
    (ih                     ~    d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ d Zd Z G d	 d
e      Z G d d      Zy)zB
Module for sedes objects that use lists as serialization format.
    )Sequence)to_listto_tuple)DeserializationErrorListDeserializationErrorListSerializationErrorSerializationError   )Binaryc                 6    t        | d      xr t        | d      S )z
    Check if `obj` is a sedes object.

    A sedes object is characterized by having the methods `serialize(obj)` and
    `deserialize(serial)`.
    	serializedeserialize)hasattrobjs    @/var/www/br/venv/lib/python3.12/site-packages/rlp/sedes/lists.pyis_sedesr      s     3$Dm)DD    c                 v    t        | t              xr( t        | t              xs t        j                  |        S )z8Check if `obj` is a sequence, but not a string or bytes.)
isinstancer   strBinaryClassis_valid_typer   s    r   is_sequencer   #   s5    c8$ 3> 9 9# >* r   c                   D     e Zd ZdZd fd	Zed        Zed        Z xZ	S )Lista]  
    A sedes for lists, implemented as a list of other sedes objects.

    :param strict: If true (de)serializing lists that have a length not
                   matching the sedes length will result in an error. If false
                   (de)serialization will stop as soon as either one of the
                   lists runs out of elements.
    c                     t         |           || _        |rZ|D ]T  }t        |      r| j	                  |        t        |t              r| j	                  t        |             Kt        d       y y )NzNInstances of List must only contain sedes objects or nested sequences thereof.)	super__init__strictr   appendr   r   r   	TypeError)selfelementsr    e	__class__s       r   r   zList.__init__4   sj     	A;KKN8,KKQ(#4 	 r   c              #   l  K   t        |      st        d|      | j                  r:t        |       t        |      k7  r#t        dt        |      t        |       fz  |      t	        t        ||             D ]  \  }\  }}	 |j                  |        y # t        $ r}t        |||      d }~ww xY ww)NCan only serialize sequencesz6Serializing list length (%d) does not match sedes (%d)r   element_exceptionindex)r   r   r    len	enumeratezipr   r	   )r#   r   r+   elementsedesr%   s         r   r   zList.serializeD   s     3()GMM;;3t9C0(Hs8SY'(  (1S$'@ 	X#E#GUXoog..	X & X,QVWWX*   A<B4?BB4	B1B,,B11B4c              #   l  K   t        |      st        d|      | j                  r:t        |      t        |       k7  r#t        dt        |      t        |       fz  |      t	        t        | |            D ]  \  }\  }}	 |j                  |        y # t        $ r}t        |||      d }~ww xY ww)NCan only deserialize sequencesz8Deserializing list length (%d) does not match sedes (%d)serialr*   r+   )r   r   r    r,   r-   r.   r   r   )r#   r5   idxr0   r/   r%   s         r   r   zList.deserializeU   s     6"*+KVTT;;3v;#d)3*Jv;D	*+  &/s4/@%A 	!C!%''00	 ( .!Qc r1   )NT)
__name__
__module____qualname____doc__r   r   r   r   r   __classcell__)r&   s   @r   r   r   *   s7      X X   r   r   c                   8    e Zd ZdZddZed        Zed        Zy)CountableLista  
    A sedes for lists of arbitrary length.

    :param element_sedes: when (de-)serializing a list, this sedes will be
                          applied to all of its elements
    :param max_length: maximum number of allowed elements, or `None` for no limit
    Nc                      || _         || _        y N)element_sedes
max_length)r#   r@   rA   s      r   r   zCountableList.__init__s   s    *$r   c              #   p  K   t        |      st        d|      | j                  ?t        |      | j                  kD  r't        dt        |       d| j                   d|      t	        |      D ]#  \  }}	 | j
                  j                  |       % y # t        $ r}t        |||      d }~ww xY ww)Nr(   zToo many elements (z
, allowed )r   r)   )r   r   rA   r,   r-   r@   r   r	   )r#   r   r+   r/   r%   s        r   r   zCountableList.serializew   s     3()GMM??&3s8doo+E(%c#hZz$//9J!L 
 (n 	XNE7X((227;;	X & X,QVWWXs*   A4B67BB6	B3 B..B33B6c              #   H  K   t        |      st        d|      t        |      D ]Y  \  }}| j                  *|| j                  k\  rt        d| j                   d|      	 | j                  j                  |       [ y # t        $ r}t        |||      d }~ww xY ww)Nr3   )r5   zToo many elements (more than rC   r4   )r   r   r-   rA   r@   r   r   )r#   r5   r+   r/   r%   s        r   r   zCountableList.deserialize   s     6"*0  (/ 	NE7*u/G.3DOO3DAF! 
((44W==	 ( .!Qe s*   A B"#B B"	BBBB"r?   )	r7   r8   r9   r:   r   r   r   r   r    r   r   r=   r=   j   s6    % X X   r   r=   N)r:   collections.abcr   	eth_utilsr   r   rlp.exceptionsr   r   r   r	   binaryr   r   r   r   listr   r=   rE   r   r   <module>rK      sE   
 
E=4 =@0 0r   