use std::path::PathBuf;
use clap::{ArgAction, Parser, ValueEnum};
use crate::i18n::Language;
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum, Default)]
pub enum PrefixProxyMode {
#[default]
Direct,
Fallback,
Prefer,
}
impl PrefixProxyMode {
pub fn as_str(self) -> &'static str {
match self {
Self::Direct => "direct",
Self::Fallback => "fallback",
Self::Prefer => "prefer",
}
}
}
#[derive(Debug, Parser, Clone)]
#[command(name = "gh-download", version, long_about = None)]
pub struct Cli {
#[arg()]
pub repo: String,
#[arg()]
pub remote_path: String,
#[arg()]
pub local_target: PathBuf,
#[arg(long = "ref", value_name = "REF")]
pub git_ref: Option<String>,
#[arg(long, value_name = "TOKEN")]
pub token: Option<String>,
#[arg(long, value_name = "URL")]
pub proxy_base: Option<String>,
#[arg(long = "prefix-mode", value_enum, value_name = "MODE")]
pub prefix_mode: Option<PrefixProxyMode>,
#[arg(long = "lang", value_enum, value_name = "LANG")]
pub language: Option<Language>,
#[arg(long, action = ArgAction::SetTrue)]
pub debug: bool,
#[arg(long, action = ArgAction::SetTrue)]
pub no_color: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ResolvedOptions {
pub repo: String,
pub remote_path: String,
pub local_target: PathBuf,
pub git_ref: Option<String>,
pub token: Option<String>,
pub proxy_base: String,
pub prefix_mode: PrefixProxyMode,
pub language: Language,
pub debug: bool,
pub no_color: bool,
}