pub trait Request {
type Response: Sized;
const TYPE: IProtoType;
// Required methods
fn encode_body(&self, out: &mut impl Write) -> Result<(), Error>;
fn decode_body(
&self,
in: &mut Cursor<Vec<u8>>
) -> Result<Self::Response, Error>;
// Provided methods
fn encode_header(
&self,
out: &mut impl Write,
sync: SyncIndex
) -> Result<(), Error> { ... }
fn encode(&self, out: &mut impl Write, sync: SyncIndex) -> Result<(), Error> { ... }
}