cargo-trim 0.10.2

Binary application to cleanup $CARGO_HOME cache
use anyhow::Result;
use clap::Parser;

use crate::config_file::ConfigFile;
#[derive(Debug, Parser)]
#[command(about = "Set config file values", arg_required_else_help = true)]
pub(crate) struct Set {
    #[arg(
        long = "dry-run",
        short = 'n',
        help = "Run command in dry run mode to see what would be done"
    )]
    dry_run: bool,
    #[arg(
        long = "directory",
        short = 'd',
        help = "Set directory of Rust project"
    )]
    directory: Option<Vec<String>>,
    #[arg(
        long = "ignore",
        short = 'i',
        help = "Add file name/directory name to ignore list in configuration file which are \
                ignored while scanning Cargo.toml file",
        value_name = "file"
    )]
    ignore: Option<Vec<String>>,
    #[arg(long = "scan-hidden-folder", help = "Set scan hidden folder as true")]
    scan_hidden_folder: bool,
    #[arg(long = "scan-target-folder", help = "Set scan hidden folder as true")]
    scan_target_folder: bool,
}

impl Set {
    pub(super) fn run(&self, config_file: &mut ConfigFile) -> Result<()> {
        let dry_run = self.dry_run;
        if let Some(directories) = &self.directory {
            for directory in directories {
                let path_separator = std::path::MAIN_SEPARATOR;
                let path = directory.trim_end_matches(path_separator);
                config_file.add_directory(path, dry_run, true)?;
            }
        }
        if let Some(files) = &self.ignore {
            for file in files {
                config_file.add_ignore_file_name(file, dry_run, true)?;
            }
        }
        if self.scan_hidden_folder {
            config_file.set_scan_hidden_folder(true, dry_run, true)?;
        }
        if self.scan_target_folder {
            config_file.set_scan_target_folder(true, dry_run, true)?;
        }

        Ok(())
    }
}