l-s 0.5.2

Summary any file‘s meta.
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)
    }
}