qserve 1.2.0

Quickly serve your files on your network with speed and simplicity.
mod config;
mod handlers;
mod log;
mod operations;
mod response;

use config::Config;
use handlers::{files::files, home::home};
use log::Logger;
use std::{
    io::{BufRead, BufReader},
    net::TcpListener,
};

fn main() {
    let config = Config::parse();
    let address = format!("{}:{}", config.ip, config.port);
    let listener = TcpListener::bind(&address).unwrap();

    log::print_url(&config.ip, &config.port);

    for stream in listener.incoming() {
        std::thread::spawn(|| {
            let mut stream = stream.unwrap();
            let buffer = BufReader::new(&mut stream);
            let request = match buffer.lines().next() {
                Some(Ok(request)) => request,
                Some(Err(_)) => {
                    Logger::error("Invalid request");
                    return;
                }
                None => {
                    Logger::warn("Empty request");
                    return;
                }
            };

            let path = request.split_whitespace().nth(1).unwrap();
            Logger::get(path);

            if path == "/" {
                home(&stream, request.clone());
            } else {
                files(&stream, request.clone());
            }
        });
    }
}