use crate::cache::CacheMode;
use clap::{ArgAction, Args as ClapArgs, Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Args {
pub pattern: Option<String>,
#[arg(short, long, action = ArgAction::Count)]
pub verbose: u8,
#[arg(short, long, value_enum)]
pub mode: Option<CacheMode>,
#[arg(short = 'i', long)]
pub ignore_case: bool,
#[arg(short = 'l', long)]
pub files_with_matches: bool,
#[arg(short = 'w', long)]
pub word_regexp: bool,
#[command(subcommand)]
pub subcommands: Option<Subcommands>,
}
#[derive(Subcommand, Debug)]
pub enum Subcommands {
Init(InitArgs),
Config(ConfigArgs),
Sync(SyncArgs),
Import(ImportArgs),
Fetch(FetchArgs),
Clean(CleanArgs),
Add(AddArgs),
Remove(RemoveArgs),
}
#[derive(ClapArgs, Debug)]
pub struct InitArgs {
#[arg(short = 'n', long = "dry-run")]
pub dry_run: bool,
}
#[derive(ClapArgs, Debug)]
pub struct ConfigArgs {
#[arg(short = 'n', long = "dry-run")]
pub dry_run: bool,
#[command(flatten)]
pub set_source: SetSource,
#[command(flatten)]
pub set_cache_mode: SetCacheMode,
#[command(flatten)]
pub set_max_open_files: SetMaxOpenFiles,
#[command(flatten)]
pub set_ignored_urls: SetIgnoredUrls,
#[command(flatten)]
pub set_underlying_urls: SetUnderlyingUrls,
#[command(flatten)]
pub set_request_timeout: SetRequestTimeout,
#[command(flatten)]
pub set_request_throttling: SetRequestThrottling,
#[command(flatten)]
pub set_max_concurrent_requests: SetMaxConcurrentRequests,
#[command(flatten)]
pub set_max_idle_connections_per_host: SetMaxIdleConnectionsPerHost,
#[command(flatten)]
pub set_idle_connections_timeout: SetIdleConnectionsTimeout,
}
#[derive(ClapArgs, Debug)]
#[group(required = false, multiple = true)]
pub struct SetSource {
#[arg(long)]
pub source: Option<String>,
#[arg(long, num_args = 0.., value_delimiter = ',')]
pub folders: Vec<String>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetCacheMode {
#[arg(long)]
pub cache_mode: Option<CacheMode>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetMaxOpenFiles {
#[arg(long)]
pub max_open_files: Option<u64>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetIgnoredUrls {
#[arg(long, value_name = "URLs", num_args = 0.., value_delimiter = ' ')]
pub ignore: Vec<String>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetUnderlyingUrls {
#[arg(long, value_name = "URLs", num_args = 0.., value_delimiter = ' ')]
pub underlying: Vec<String>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetRequestTimeout {
#[arg(long)]
pub request_timeout: Option<u64>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetRequestThrottling {
#[arg(long)]
pub request_throttling: Option<u64>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetMaxConcurrentRequests {
#[arg(long)]
pub max_concurrent_requests: Option<usize>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetMaxIdleConnectionsPerHost {
#[arg(long)]
pub max_idle_connections_per_host: Option<usize>,
}
#[derive(ClapArgs, Debug)]
#[group(required = false)]
pub struct SetIdleConnectionsTimeout {
#[arg(long)]
pub idle_connections_timeout: Option<u64>,
}
#[derive(ClapArgs, Debug)]
pub struct ImportArgs {
#[arg(short = 'n', long = "dry-run")]
pub dry_run: bool,
}
#[derive(ClapArgs, Debug)]
pub struct FetchArgs {
#[arg(short, long)]
pub replace: bool,
#[arg(short, long, value_enum)]
pub mode: Option<CacheMode>,
#[arg(short, long, value_name = "URLs", num_args = 0.., value_delimiter = ' ')]
pub diff: Vec<String>,
#[arg(long, num_args = 0.., value_delimiter = ' ')]
pub urls: Vec<String>,
#[arg(short = 'n', long = "dry-run")]
pub dry_run: bool,
}
#[derive(ClapArgs, Debug)]
pub struct SyncArgs {
#[arg(short, long, value_enum)]
pub mode: Option<CacheMode>,
#[arg(short = 'n', long = "dry-run")]
pub dry_run: bool,
}
#[derive(ClapArgs, Debug)]
pub struct CleanArgs {
#[arg(short, long)]
pub all: bool,
#[arg(short, long, value_enum)]
pub mode: Option<CacheMode>,
}
#[derive(ClapArgs, Debug)]
pub struct AddArgs {
#[arg(num_args = 0.., value_name = "URLs", value_delimiter = ' ')]
pub urls: Vec<String>,
#[arg(short = 'n', long = "dry-run")]
pub dry_run: bool,
}
#[derive(ClapArgs, Debug)]
pub struct RemoveArgs {
#[arg(num_args = 0.., value_name = "URLs", value_delimiter = ' ')]
pub urls: Vec<String>,
}