from ralium._util import FunctionType, ClassType, Any

class FunctionCallInfo:
    def __init__(self, 
        cls: ClassType, 
        function: FunctionType, 
        result: Any | None = None, 
        *args: tuple[Any], 
        **kwargs: dict[str, Any]
    ) -> None: ...
    def __repr__(self) -> str: ...

class ClassListener:
    class BroadcastFunction:
        def __init__(self) -> None: ...
        def __call__(self, *args, **kwargs) -> ClassType: ...
        def subscribe(self, function: FunctionType, is_after: bool = False) -> None: ...
        def unsubscribe(self, function: FunctionType, is_after: bool = False) -> None: ...

    def __init__(self, cls: ClassType) -> None: ...
    def __call__(self, *args: tuple[Any], **kwargs: dict[str, Any]) -> ClassType: ...
    
    def create_listener(self, function: FunctionType) -> BroadcastFunction: ...