use std::path::PathBuf;
use std::{env, fs};
use anyhow::{anyhow, Context, Result};
use clap::Parser;
#[derive(Debug, Parser)]
#[command(author, version, about = "汇总文件或文件夹的元信息")]
pub struct Cli {
pub path: Option<PathBuf>,
}
impl Cli {
pub fn resolve_path(&self) -> Result<PathBuf> {
let candidate = match &self.path {
Some(p) => p.clone(),
None => env::current_dir().context("无法获取当前工作目录")?,
};
let path = if candidate.is_absolute() {
candidate
} else {
env::current_dir()
.context("无法获取当前工作目录")?
.join(candidate)
};
let info = fs::symlink_metadata(&path)
.with_context(|| format!("无法读取路径信息: {}", path.display()))?;
if info.file_type().is_symlink() {
return Err(anyhow!("不支持扫描符号链接: {}", path.display()));
}
Ok(path)
}
}