use clap::{Parser, Subcommand, ValueEnum};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(name = "claudeforge")]
#[command(about = "Create new projects optimized for Claude Code", long_about = None)]
#[command(version)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
New {
#[arg(value_enum)]
language: Language,
name: String,
#[arg(short, long)]
directory: Option<PathBuf>,
#[arg(short, long)]
yes: bool,
},
List,
Update,
Version,
}
#[derive(Debug, Clone, ValueEnum, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub enum Language {
#[serde(rename = "rust")]
Rust,
#[serde(rename = "go")]
Go,
#[serde(rename = "python")]
Python,
}
impl std::fmt::Display for Language {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Language::Rust => write!(f, "rust"),
Language::Go => write!(f, "go"),
Language::Python => write!(f, "python"),
}
}
}