use std::net::SocketAddr;
use std::sync::{Arc};
use async_trait::async_trait;
use tokio::sync::{RwLock};
use tokio::sync::oneshot::Sender;
use tokio_util::bytes::{BytesMut};
use tokio_util::codec::{Framed};
use crate::codec::codec_trait::TfCodec;
use crate::structures::s_type::StructureType;
use crate::structures::traffic_proc::TrafficProcessorHolder;
use crate::structures::transport::Transport;
#[async_trait]
pub trait Handler: Send + Sync {
type Codec: TfCodec;
async fn serve_route(
&mut self,
client_meta: (SocketAddr, &mut Option<Sender<Arc<RwLock<dyn Handler<Codec = Self::Codec>>>>>),
s_type: Box<dyn StructureType>,
data: BytesMut,
) -> Result<Vec<u8>, Vec<u8>>;
async fn accept_stream(&mut self, add: SocketAddr, stream: (Framed<Transport, Self::Codec>, TrafficProcessorHolder<Self::Codec>));
}