use clap::{Args, Subcommand, ValueEnum};
#[derive(Debug, Clone, Copy, ValueEnum, PartialEq, Eq)]
pub enum SecretProvider {
#[value(name = "openai")]
OpenAI,
#[value(name = "anthropic")]
Anthropic,
#[value(name = "gemini")]
Gemini,
#[value(name = "deepseek")]
DeepSeek,
#[value(name = "openrouter")]
OpenRouter,
#[value(name = "stepfun")]
StepFun,
#[value(name = "zai")]
Zai,
#[value(name = "moonshot")]
Moonshot,
#[value(name = "minimax")]
MiniMax,
#[value(name = "mistral")]
Mistral,
#[value(name = "huggingface")]
HuggingFace,
#[value(name = "mimo")]
MiMo,
#[value(name = "opencode-zen")]
OpenCodeZen,
#[value(name = "opencode-go")]
OpenCodeGo,
#[value(name = "qwen")]
Qwen,
#[value(name = "evolink")]
Evolink,
#[value(name = "poolside")]
Poolside,
#[value(name = "ollama")]
Ollama,
#[value(name = "lmstudio")]
LMStudio,
#[value(name = "copilot")]
Copilot,
}
impl SecretProvider {
pub fn as_str(&self) -> &'static str {
match self {
SecretProvider::OpenAI => "openai",
SecretProvider::Anthropic => "anthropic",
SecretProvider::Gemini => "gemini",
SecretProvider::DeepSeek => "deepseek",
SecretProvider::OpenRouter => "openrouter",
SecretProvider::StepFun => "stepfun",
SecretProvider::Zai => "zai",
SecretProvider::Moonshot => "moonshot",
SecretProvider::MiniMax => "minimax",
SecretProvider::Mistral => "mistral",
SecretProvider::HuggingFace => "huggingface",
SecretProvider::MiMo => "mimo",
SecretProvider::OpenCodeZen => "opencode-zen",
SecretProvider::OpenCodeGo => "opencode-go",
SecretProvider::Qwen => "qwen",
SecretProvider::Evolink => "evolink",
SecretProvider::Poolside => "poolside",
SecretProvider::Ollama => "ollama",
SecretProvider::LMStudio => "lmstudio",
SecretProvider::Copilot => "copilot",
}
}
}
#[derive(Debug, Subcommand, Clone)]
pub enum SecretSubcommand {
#[command(name = "list", visible_alias = "ls")]
List,
#[command(name = "status", visible_alias = "info")]
Status {
provider_name: Option<SecretProvider>,
},
#[command(name = "add", visible_alias = "set")]
Add {
provider_name: SecretProvider,
},
#[command(name = "delete", visible_alias = "remove")]
Delete {
provider_name: SecretProvider,
},
#[command(name = "migrate")]
Migrate(MigrateArgs),
}
#[derive(Debug, Args, Clone)]
pub struct MigrateArgs {
pub provider_name: Option<SecretProvider>,
#[arg(long)]
pub all: bool,
#[arg(long)]
pub dry_run: bool,
#[arg(long)]
pub force: bool,
}
#[derive(Debug, Args, Clone)]
pub struct SecretArgs {
#[command(subcommand)]
pub command: Option<SecretSubcommand>,
}