@callback begin_stream( handler :: term(), session :: term(), context :: term(), options :: term() ) :: {:ok, {{state :: term(), handler :: term()}, session :: term()}} | {:error, reason :: term()}
@callback handle_event(event :: term(), state :: term()) :: {:cont, state :: term()} | {:halt, state :: term()}