#![allow(unused)]
#![allow(non_upper_case_globals)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
use std::{
io::{self, BufReader, BufWriter},
net::TcpStream,
sync::{mpsc::Receiver, Arc},
};
use crate::{error::HttpResult, header::Header, request::Request};
trait Handler {
fn ServeHttp(&self, response_writer: &mut impl ResponseWriter, request: &Request);
}
trait ResponseWriter {
fn Header(&self) -> &Header;
fn Write(&mut self, buf: &[u8]) -> HttpResult<usize>;
fn WriteHeader(&mut self, status_code: u16);
}
trait Flusher {
fn Flush(&mut self) -> io::Result<()>;
}
trait Hijacker {
fn Hijack(self) -> io::Result<(TcpStream, BufReader<TcpStream>, BufWriter<TcpStream>)>;
}
trait CloseNotifier {
fn CloseNotify(&self) -> Receiver<bool>;
}