[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:
parent
b5a2c750c5
commit
e35b0c9fd9
18
src/main.rs
18
src/main.rs
@ -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),
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user