use std::path::PathBuf;
use clap::{Args, Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(name = "ironic", version, about)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Debug, Subcommand)]
pub enum Command {
New(NewArgs),
Start(CargoArgs),
Dev(CargoArgs),
Build(CargoArgs),
Test(CargoArgs),
#[command(alias = "g")]
Generate(GenerateArgs),
Doctor,
#[command(alias = "upgrade")]
Update,
Routes(InspectArgs),
Graph(InspectArgs),
}
#[derive(Debug, Args)]
pub struct NewArgs {
pub name: String,
#[arg(long, hide = true)]
pub framework_workspace: Option<PathBuf>,
}
#[derive(Debug, Args)]
pub struct CargoArgs {
#[arg(last = true, allow_hyphen_values = true)]
pub cargo_args: Vec<String>,
}
#[derive(Debug, Args)]
pub struct InspectArgs {
#[arg(default_value = ".")]
pub path: PathBuf,
}
#[derive(Debug, Args)]
pub struct GenerateArgs {
#[command(subcommand)]
pub generator: Generator,
}
#[derive(Debug, Subcommand)]
pub enum Generator {
#[command(alias = "mo")]
Module(NameArgs),
#[command(alias = "co")]
Controller(NameArgs),
#[command(alias = "s")]
Service(NameArgs),
#[command(alias = "res")]
Resource(NameArgs),
#[command(alias = "d")]
Decorator(NameArgs),
#[command(alias = "f")]
Filter(NameArgs),
#[command(alias = "ga")]
Gateway(NameArgs),
#[command(alias = "gu")]
Guard(NameArgs),
#[command(alias = "itc")]
Interceptor(NameArgs),
#[command(alias = "mi")]
Middleware(NameArgs),
#[command(alias = "pi")]
Pipe(NameArgs),
#[command(alias = "pr")]
Provider(NameArgs),
}
#[derive(Debug, Args)]
pub struct NameArgs {
pub name: String,
}