mod claude;
mod codex;
mod gemini;
mod gh;
mod glab;
mod opencode;
mod qwen_coder;
pub use self::claude::ClaudeProvider;
pub use self::codex::CodexProvider;
pub use self::gemini::GeminiProvider;
pub use self::gh::GhProvider;
pub use self::glab::GlabProvider;
pub use self::opencode::OpencodeProvider;
pub use self::qwen_coder::QwenCoderProvider;
use crate::AuthProvider;
pub fn all_providers() -> Vec<Box<dyn AuthProvider>> {
vec![
Box::new(GhProvider),
Box::new(GlabProvider),
Box::new(ClaudeProvider),
Box::new(CodexProvider),
Box::new(GeminiProvider),
Box::new(OpencodeProvider),
Box::new(QwenCoderProvider),
]
}
pub fn provider_by_name(name: &str) -> Option<Box<dyn AuthProvider>> {
match name {
"gh" => Some(Box::new(GhProvider)),
"glab" => Some(Box::new(GlabProvider)),
"claude" => Some(Box::new(ClaudeProvider)),
"codex" => Some(Box::new(CodexProvider)),
"gemini" => Some(Box::new(GeminiProvider)),
"opencode" => Some(Box::new(OpencodeProvider)),
"qwen-coder" => Some(Box::new(QwenCoderProvider)),
_ => None,
}
}