use crate::connections::Connection;
use once_cell::sync::OnceCell;
use tokio::sync::oneshot;
use std::io;
mod disconnect;
mod handshake;
mod reading;
mod writing;
pub use disconnect::{Disconnect, DisconnectHandler};
pub use handshake::{Handshake, HandshakeHandler};
pub use reading::{Reading, ReadingHandler};
pub use writing::{Writing, WritingHandler};
#[derive(Default)]
pub(crate) struct Protocols {
pub(crate) handshake_handler: OnceCell<HandshakeHandler>,
pub(crate) reading_handler: OnceCell<ReadingHandler>,
pub(crate) writing_handler: OnceCell<WritingHandler>,
pub(crate) disconnect_handler: OnceCell<DisconnectHandler>,
}
pub type ReturnableItem<T, U> = (T, oneshot::Sender<U>);
pub(crate) type ReturnableConnection = ReturnableItem<Connection, io::Result<Connection>>;