use std::path::PathBuf; use std::sync::LazyLock; use crate::FB_SECTOR_SIZE; use clap::{ArgAction, Parser}; pub static CONFIG: LazyLock = LazyLock::new(|| Args::parse()); #[derive(Parser, Debug, Clone)] pub struct Args { /// Path to source file or block device #[arg(short, long, value_hint = clap::ValueHint::DirPath)] pub input: PathBuf, /// Path to output file. Defaults to {input}.iso #[arg(short, long, value_hint = clap::ValueHint::DirPath)] pub output: Option, /// Path to rescue map. Defaults to {input}.map #[arg(short, long, value_hint = clap::ValueHint::DirPath)] pub map: Option, /// Max number of consecutive sectors to test as a group #[arg(short, long, default_value_t = 128)] pub cluster_length: usize, /// Number of brute force read passes #[arg(short, long, default_value_t = 2)] pub brute_passes: usize, /// Sector size #[arg(short, long, default_value_t = FB_SECTOR_SIZE)] pub sector_size: usize, // Behaviour is backwards. // ArgAction::SetFalse by default evaluates to true, // ArgAction::SetTrue by default evaluates to false. /// Whether to reopen the file on a read error or not. #[arg(short, long, action=ArgAction::SetTrue)] pub reopen_on_error: bool, }