use std::fs;
use crate::{Request, Response};
fn read_file(parent_dir: String, request: Request, mut response: Response) {
match fs::read_to_string(
parent_dir.chars().skip(1).collect::<String>() + &request.target.relative_path,
) {
Ok(contents) => response.send(contents),
Err(error) => {
use crate::enums::Status;
use std::io::ErrorKind;
let status: Status = match error.kind() {
ErrorKind::NotFound => Status::NotFound,
_ => Status::InternalError,
};
response.status(status);
response.end();
}
}
}
pub fn read_same_dir(request: Request, response: Response) {
read_file(request.target.target_path.clone(), request, response)
}
pub fn read_diff_dir<S>(parent_dir: S) -> impl Fn(Request, Response)
where
S: Into<String> + Clone,
{
move |request: Request, response: Response| {
read_file(parent_dir.clone().into(), request, response)
}
}