
    =Xc                        d dl mZ d dlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 g dZ G d d      Z G d	 d
      Z G d d      Zy)    )annotations)ListOptionalSequenceTuple   )frames)ExtensionNameExtensionParameter)	ExtensionClientExtensionFactoryServerExtensionFactoryc                  >    e Zd ZU dZded<   	 dd	 	 	 	 	 ddZd	dZy)
r   z%
    Base class for extensions.

    r
   nameN)max_sizec                    y)a)  
        Decode an incoming frame.

        Args:
            frame (Frame): incoming frame.
            max_size: maximum payload size in bytes.

        Returns:
            Frame: Decoded frame.

        Raises:
            PayloadTooBig: if decoding the payload exceeds ``max_size``.

        N )selfframer   s      </usr/lib/python3/dist-packages/websockets/extensions/base.pydecodezExtension.decode           c                     y)z
        Encode an outgoing frame.

        Args:
            frame (Frame): outgoing frame.

        Returns:
            Frame: Encoded frame.

        Nr   )r   r   s     r   encodezExtension.encode*   r   r   )r   frames.Framer   zOptional[int]returnr   )r   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r      s=    
  #'	  	
 
*
r   r   c                  :    e Zd ZU dZded<   	 ddZ	 	 	 	 	 	 ddZy)	r   z:
    Base class for client-side extension factories.

    r
   r   c                     y)z
        Build parameters to send to the server for this extension.

        Returns:
            List[ExtensionParameter]: Parameters to send to the server.

        Nr   )r   s    r   get_request_paramsz)ClientExtensionFactory.get_request_params@   r   r   c                     y)a  
        Process parameters received from the server.

        Args:
            params (Sequence[ExtensionParameter]): parameters received from
                the server for this extension.
            accepted_extensions (Sequence[Extension]): list of previously
                accepted extensions.

        Returns:
            Extension: An extension instance.

        Raises:
            NegotiationError: if parameters aren't acceptable.

        Nr   r   paramsaccepted_extensionss      r   process_response_paramsz.ClientExtensionFactory.process_response_paramsI   r   r   N)r   zList[ExtensionParameter])r(   Sequence[ExtensionParameter]r)   Sequence[Extension]r   r   )r   r   r    r!   r"   r%   r*   r   r   r   r   r   7   s8    
 , 1 
	r   r   c                  2    e Zd ZU dZded<   	 	 	 	 	 	 	 ddZy)r   z:
    Base class for server-side extension factories.

    r
   r   c                     y)a  
        Process parameters received from the client.

        Args:
            params (Sequence[ExtensionParameter]): parameters received from
                the client for this extension.
            accepted_extensions (Sequence[Extension]): list of previously
                accepted extensions.

        Returns:
            Tuple[List[ExtensionParameter], Extension]: To accept the offer,
            parameters to send to the client for this extension and an
            extension instance.

        Raises:
            NegotiationError: to reject the offer, if parameters received from
                the client aren't acceptable.

        Nr   r'   s      r   process_request_paramsz-ServerExtensionFactory.process_request_paramsi   r   r   N)r(   r+   r)   r,   r   z*Tuple[List[ExtensionParameter], Extension])r   r   r    r!   r"   r/   r   r   r   r   r   `   s3    
 , 1 
4	r   r   N)
__future__r   typingr   r   r   r    r	   r
   r   __all__r   r   r   r   r   r   <module>r4      s<    " 2 2  6 L( (V& &R   r   