use std::path::PathBuf;
use clap::ValueEnum;
use crate::error::{Error, Result};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Tool {
Claude,
Codex,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum ToolFilter {
Claude,
Codex,
All,
}
impl ToolFilter {
pub fn to_tools(self) -> Vec<Tool> {
match self {
Self::Claude => vec![Tool::Claude],
Self::Codex => vec![Tool::Codex],
Self::All => Tool::all().to_vec(),
}
}
}
impl Tool {
pub(crate) fn all() -> [Self; 2] {
[Self::Claude, Self::Codex]
}
pub(crate) fn id(self) -> &'static str {
match self {
Self::Claude => "claude",
Self::Codex => "codex",
}
}
pub(crate) fn display_name(self) -> &'static str {
match self {
Self::Claude => "Claude Code",
Self::Codex => "Codex",
}
}
pub(crate) fn skills_dir(self) -> Result<PathBuf> {
let home = dirs::home_dir().ok_or(Error::HomeDirMissing)?;
let dir = match self {
Self::Claude => home.join(".claude").join("skills"),
Self::Codex => home.join(".codex").join("skills"),
};
Ok(dir)
}
pub(crate) fn local_skills_dir(self) -> PathBuf {
match self {
Self::Claude => PathBuf::from(".claude").join("skills"),
Self::Codex => PathBuf::from(".codex").join("skills"),
}
}
}