use futures_lite::{AsyncWriteExt, AsyncReadExt};
use futures_lite::future::or;
use std::future::Future;
use async_net::TcpStream;
use serde::{Serialize, Deserialize};
pub use async_net;
pub mod raw;
#[cfg(feature = "async-fifo")]
pub mod async_fifo;
#[cfg(feature = "async-channel")]
pub mod async_channel;
pub trait SendFut<O>: Future<Output = O> + Send {}
impl<O, Y: Future<Output = O> + Send> SendFut<O> for Y {}
pub trait GetOutgoing<O> {
fn get_outgoing(&mut self) -> impl SendFut<Option<O>>;
}
pub trait HandleIncoming<I> {
fn handle_incoming(&mut self, incoming: I) -> impl SendFut<()>;
}