composition-cli 2.1.1

composition is a modular lines-of-code CLI tool to analyze and display code composition in directories
use clap::Parser;
use std::path::{Path, PathBuf};

#[derive(Debug, Parser)]
#[command(author = "lalitm1004")]
pub struct Cli {
    #[arg(
        default_value = ".",
        value_parser = parse_path,
        help = "Path to the directory of file to process"
    )]
    pub path: PathBuf,

    #[arg(
        long,
        global = true,
        default_value_t = 1.0,
        value_parser,
        value_name = "FLOAT",
        help = "Scale factor for the contribution bar"
    )]
    pub scale_bar: f32,

    #[arg(long, action = clap::ArgAction::SetTrue, help = "Override use_color config setting")]
    pub use_color: Option<bool>,

    #[arg(long, alias = "log", action = clap::ArgAction::SetTrue, help = "Enable logarithmic scale for the bar")]
    pub log_scale: Option<bool>,

    #[arg(long, action = clap::ArgAction::SetTrue, help = "Override respect_gitignore config setting")]
    pub respect_gitignore: Option<bool>,

    #[arg(long, action = clap::ArgAction::SetTrue, help = "Override ignore_dotfolders config setting")]
    pub ignore_dotfolders: Option<bool>,

    #[arg(long, action = clap::ArgAction::SetTrue, help = "Override ignore_dotfiles config setting")]
    pub ignore_dotfiles: Option<bool>,

    #[arg(long, action = clap::ArgAction::SetTrue, help = "Override ignore_empty_lines config setting")]
    pub ignore_empty_lines: Option<bool>,
}

fn parse_path(arg: &str) -> Result<PathBuf, String> {
    let path = Path::new(arg);
    if path.exists() {
        Ok(path.to_path_buf())
    } else {
        Err("does not exist".into())
    }
}