use crate::{encoding::Codec, send_budget::SendBudget, Decoder, Encoder};
pub trait MessageReactor: 'static {
type Codec: Codec + Decoder<Message = Self::Inbound> + Encoder<Message = Self::Outbound>;
type Inbound;
type Outbound;
type LogicalOutbound;
fn on_inbound_message(&mut self, message: Self::Inbound) -> ReactorStatus;
fn poll(
self: std::pin::Pin<&mut Self>,
_context: &mut std::task::Context<'_>,
) -> std::ops::ControlFlow<()> {
std::ops::ControlFlow::Continue(())
}
fn on_outbound_message(&mut self, message: Self::LogicalOutbound) -> Self::Outbound;
fn poll_outbound_many(
self: std::pin::Pin<&mut Self>,
_context: &mut std::task::Context<'_>,
_outbound: &mut SendBudget<'_, Self::Codec>,
) -> std::task::Poll<Option<()>> {
std::task::Poll::Ready(None)
}
}
#[derive(Debug, PartialEq, Eq)]
pub enum ReactorStatus {
Continue,
Disconnect,
}