[code] small improvements suggested by Grok 3

- differentiate between "not a directory" and a real error while reading the path
- don't clone the PathBuf, instead use Arc
This commit is contained in:
ddidderr 2025-02-20 19:04:53 +01:00
parent b5a2c750c5
commit e35b0c9fd9
Signed by: ddidderr
GPG Key ID: 3841F1C27E6F0E14

View File

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