use clap::Args; use std::path::PathBuf; use std::sync::Arc; use crate::vfs::{local_fs::LocalFs, nfs_server::{NfsVfsServer, NfsConfig}}; #[derive(Debug, Args)] pub struct NfsServerCommand { /// Port to listen on (default: 2049) #[arg(short, long, default_value = "2049")] port: u16, /// Root directory to export #[arg(short, long, default_value = "/tmp/nfs_export")] root: PathBuf, /// Share name (export name) #[arg(short, long, default_value = "export")] share_name: String, } pub async fn run_nfs_server(cmd: NfsServerCommand) -> anyhow::Result<()> { println!("Starting NFS server on port {}", cmd.port); println!("Export directory: {}", cmd.root.display()); println!("Share name: {}", cmd.share_name); if !cmd.root.exists() { std::fs::create_dir_all(&cmd.root)?; println!("Created export directory: {}", cmd.root.display()); } let vfs = Arc::new(LocalFs::new()); let server = NfsVfsServer::new(vfs, cmd.root.clone()).with_port(cmd.port); println!("NFS server starting..."); server.start(cmd.port).await?; println!("NFS server stopped"); Ok(()) }