diff --git a/src/main.rs b/src/main.rs index c928ef3..1aae21f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,12 @@ use std::{ net::{IpAddr, SocketAddr}, num::NonZeroUsize, path::PathBuf, + sync::Arc, thread::available_parallelism, }; use actix_web::{App, HttpServer}; -use clap::{crate_name, crate_version, Parser}; +use clap::{Parser, crate_name, crate_version}; #[derive(Parser, Debug)] #[clap(name = crate_name!(), version = crate_version!())] @@ -25,11 +26,11 @@ struct Args { } fn parse_valid_dir(dir: &str) -> Result { - let path = std::path::Path::new(dir); - if path.is_dir() { - Ok(path.to_path_buf()) - } else { - Err(format!("{} is not a valid directory", path.display())) + let path = PathBuf::from(dir); + match std::fs::metadata(&path) { + Ok(metadata) if metadata.is_dir() => Ok(path), + Ok(_) => Err(format!("{} is not a directory", path.display())), + Err(e) => Err(format!("Error accessing {}: {}", path.display(), e)), } } @@ -37,7 +38,7 @@ fn parse_valid_dir(dir: &str) -> Result { async fn main() -> std::io::Result<()> { let args = Args::parse(); - let dir = args.dir; + let dir = Arc::new(args.dir); let sock = SocketAddr::new(args.ip, args.port); println!( @@ -46,8 +47,9 @@ async fn main() -> std::io::Result<()> { ); HttpServer::new(move || { + let dir = dir.clone(); App::new().service( - actix_files::Files::new("/", dir.clone()) + actix_files::Files::new("/", dir.as_ref()) .show_files_listing() .prefer_utf8(true), )