use std::io::{self, Write};
use bytes::Bytes;
pub mod extension;
pub mod unit;
pub mod null;
pub mod wire;
pub trait PeerProtocol {
type ProtocolMessage;
fn bytes_needed(&mut self, bytes: &[u8]) -> io::Result<Option<usize>>;
fn parse_bytes(&mut self, bytes: Bytes) -> io::Result<Self::ProtocolMessage>;
fn write_bytes<W>(&mut self, message: &Self::ProtocolMessage, writer: W) -> io::Result<()>
where W: Write;
fn message_size(&mut self, message: &Self::ProtocolMessage) -> usize;
}
pub trait NestedPeerProtocol<M> {
fn received_message(&mut self, message: &M);
fn sent_message(&mut self, message: &M);
}