profileme / src/config.rs

raw file 2082 bytes
use crate::Cli;
use anyhow::Result;
use std::path::PathBuf;

pub struct Config {
    pub roots: Vec<PathBuf>,
    pub out: PathBuf,
    pub workdir: PathBuf,
    pub model_url: String,
    pub model: String,
    pub max_file_bytes: u64,
    pub max_files: usize,
    #[allow(dead_code)]
    pub concurrency: usize,
    pub dry_run: bool,
    pub resume: bool,
    pub ocr: bool,
    pub include_hidden: bool,
    pub excludes: Vec<String>,
    pub redact: bool,
    pub extract_only: bool,
    pub include_apps: bool,
    pub include_code: bool,
    pub no_llm: bool,
}

impl Config {
    pub fn from_cli(cli: &Cli) -> Result<Self> {
        let roots = if cli.root.is_empty() {
            vec![dirs::home_dir().unwrap_or_else(|| PathBuf::from("."))]
        } else {
            cli.root.clone()
        };
        let mut excludes = vec![
            ".git".into(),
            "node_modules".into(),
            "__pycache__".into(),
            ".cache".into(),
            "target".into(),
            ".venv".into(),
            "venv".into(),
            "dist".into(),
            "build".into(),
            ".npm".into(),
            ".cargo".into(),
            ".rustup".into(),
            "steam".into(),
            "steamapps".into(),
            ".bitmonero".into(),
            "Monero".into(),
        ];
        excludes.extend(cli.exclude.clone());

        Ok(Config {
            roots,
            out: cli.out.clone(),
            workdir: cli.workdir.clone(),
            model_url: cli.model_url.clone(),
            model: cli.model.clone(),
            max_file_bytes: cli.max_file_bytes,
            max_files: cli.max_files,
            concurrency: cli.concurrency.max(1),
            dry_run: cli.dry_run,
            resume: cli.resume,
            ocr: cli.ocr,
            include_hidden: cli.include_hidden,
            excludes,
            redact: !cli.no_redact,
            extract_only: cli.extract_only,
            include_apps: !cli.no_apps,
            include_code: cli.include_code,
            no_llm: cli.no_llm,
        })
    }
}