pub trait Serializer: Unpin {
type Message: Send;
fn encode(&mut self, response: Self::Message, buffer: &mut impl bytes::BufMut);
}
pub trait Deserializer: Unpin {
type Message: Send;
fn decode(
&mut self,
buffer: impl bytes::Buf,
) -> std::result::Result<(usize, Self::Message), DeserializeError>;
}
#[derive(Debug, thiserror::Error)]
pub enum DeserializeError {
#[error("Need more bytes to decode the next message")]
IncompleteBuffer { next_message_size: usize },
#[error("Bad buffer")]
InvalidBuffer,
#[error("Skip message")]
SkipMessage { distance: usize },
}
pub trait ConnectionBindings {
type Deserializer: Deserializer;
type Serializer: Serializer;
}