choki 1.1.19

A simple http server built from scratch. Not intended for production uses but a simple website with some query stuff can be made. (can withstand a lot of requests per second)
Documentation
use std::fs::{ self, File };
use std::io::{ BufReader, Read, Seek, SeekFrom, Write };

use choki::src::request::Request;
use choki::src::response::Response;
use choki::src::structs::{ ContentType, Header, HttpServerError, RequestType, ResponseCode, Url };
use choki::Server;

fn main() {
    let mut server: Server<u8> = Server::new(None, None);

    server.use_middleware(|url: &Url, req: &Request, res: &mut Response, public_var: &Option<u8>| {
        println!("Ip {}", req.ip.clone().unwrap_or_default());
        return true;
    });
    server.use_logger(|input: &choki::src::structs::HttpServerError| {
        println!("Hi custom error printer: {}", input.reason);
    });
    server
        .on(
            RequestType::Other("Custom".to_string()),
            "/",
            |req: Request, mut res: Response, public_var: Option<u8>| {
                res.send_string("HI custom one")
            }
        )
        .unwrap();

    server
        .get("/watch/[id]", |req: Request, mut res: Response, public_var: Option<u8>| {
            res.send_string("HI")
        })
        .unwrap();
    server
        .get("/test", |req: Request, mut res: Response, public_var: Option<u8>| {
            res.send_code(ResponseCode::Ok)
        })
        .unwrap();
    server
        .post("/filetest", |req: Request, mut res: Response, public_var: Option<u8>| {
            res.send_code(ResponseCode::Ok)?;
            let body: Vec<choki::src::structs::BodyItem<'_>> = req.body();
            Err(HttpServerError::new("Hi"))
        })
        .unwrap();
    server
        .get("/filetest", |mut req: Request, mut res: Response, public_var: Option<u8>| {
            res.send_code(ResponseCode::Ok)?;
            Err(HttpServerError::new("Opsi no!"))
        })
        .unwrap();

    server
        .get("/", |req: Request, mut res: Response, public_var: Option<u8>| {
            let mut file = File::open("./tests/static/index.html").unwrap();
            let size = file.metadata().unwrap().len();
            let mut buf_reader = BufReader::new(file);
            let mut data: Vec<u8> = Vec::new();
            buf_reader.read_to_end(&mut data).unwrap();
            res.send_bytes_chunked(&data, Some(ContentType::Html))?;

            Ok(())
        })
        .unwrap();
    server.new_static("/static", "./tests/static", false).unwrap();
    server.listen(3000, None, None, || { println!("Server is listening on port 3000") }).unwrap();
    Server::<i32>::lock();
}