use hyper::{Body, Request, Response};
use std::path::Path;
use crate::{compression, control_headers, static_files};
use crate::{error::Result, error_page};
pub async fn handle_request(
base: &Path,
compression: bool,
dir_listing: bool,
req: &Request<Body>,
) -> Result<Response<Body>> {
let headers = req.headers();
let method = req.method();
match static_files::handle_request(method, headers, base, req.uri().path(), dir_listing).await {
Ok(mut resp) => {
if compression {
resp = compression::auto(method, headers, resp)?;
}
let ext = req.uri().path().to_lowercase();
control_headers::with_cache_control(&ext, &mut resp);
Ok(resp)
}
Err(status) => error_page::get_error_response(method, &status),
}
}