o
    qmi                     @   s@   d dl Z d dlZd dlmZ G dd deeZG dd dZdS )    N)Enumc                   @   s   e Zd ZdZdZdZdZdS )	EventTypeopenmessageerrorcloseN)__name__
__module____qualname__OPENMESSAGEERRORCLOSE r   r   H/home/ubuntu/.local/lib/python3.10/site-packages/sarvamai/core/events.pyr      s
    r   c                   @   sp   e Zd ZdZdddZdedejejgejf ddfdd	Z	ded
ejddfddZ
ded
ejddfddZdS )EventEmitterMixinz;
    Simple mixin for registering and emitting events.
    returnNc                 C   s
   i | _ d S N
_callbacks)selfr   r   r   __init__   s   
zEventEmitterMixin.__init__
event_namecallbackc                 C   s(   || j vr
g | j |< | j | | d S r   )r   append)r   r   r   r   r   r   on   s   

zEventEmitterMixin.ondatac                 C   s*   || j v r| j | D ]}|| q
d S d S r   r   )r   r   r   cbr   r   r   _emit   s
   

zEventEmitterMixin._emitc                    s@   || j v r| j | D ]}||}t|r|I d H  qd S d S r   )r   inspectisawaitable)r   r   r   r   resr   r   r   _emit_async!   s   


zEventEmitterMixin._emit_async)r   N)r   r	   r
   __doc__r   r   typingCallableAnyr   r   r"   r   r   r   r   r      s    
&r   )r   r$   enumr   strr   r   r   r   r   r   <module>   s
   