use clap::{Parser, Subcommand}; #[derive(Parser, Debug)] #[command(name = "api-token-vault")] #[command(author = "API Token Vault")] #[command(version = "0.1.0")] #[command(about = "Secure API token management with encrypted vault storage", long_about = None)] pub struct Cli { #[command(subcommand)] pub command: Commands, } #[derive(Subcommand, Debug)] pub enum Commands { #[command(name = "init")] #[command(about = "Initialize a new vault for a project")] Init { #[arg(short, long)] master_password: Option, #[arg(short, long, value_name = "PROJECT")] project: Option, }, #[command(name = "generate")] #[command(about = "Generate a new secure API token")] Generate { #[arg(short, long, value_name = "NAME")] name: String, #[arg(short, long, value_name = "LENGTH")] length: Option, #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, }, #[command(name = "list")] #[command(about = "List all tokens in the vault")] List { #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, }, #[command(name = "get")] #[command(about = "Get a specific token value")] Get { #[arg(short, long, value_name = "NAME")] name: String, #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, #[arg(short, long)] raw: bool, }, #[command(name = "delete")] #[command(about = "Delete a token from the vault")] Delete { #[arg(short, long, value_name = "NAME")] name: String, #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, }, #[command(name = "rotate")] #[command(about = "Rotate (regenerate) a specific token")] Rotate { #[arg(short, long, value_name = "NAME")] name: String, #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, #[arg(long)] force: bool, }, #[command(name = "set-rotation")] #[command(about = "Set auto-rotation schedule for a token")] SetRotation { #[arg(short, long, value_name = "NAME")] name: String, #[arg(short, long, value_name = "DAYS")] days: u32, #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, }, #[command(name = "inject")] #[command(about = "Inject tokens into a .env file")] Inject { #[arg(short, long, value_name = "FILE")] env_file: Option, #[arg(short, long, value_name = "PREFIX")] token_prefix: Option, #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, #[arg(long)] dry_run: bool, }, #[command(name = "check-expired")] #[command(about = "Check for expired tokens")] CheckExpired { #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, }, #[command(name = "rotate-expired")] #[command(about = "Rotate all expired tokens")] RotateExpired { #[arg(short, long, value_name = "PROJECT")] project: Option, #[arg(short, long)] master_password: Option, }, } impl Cli { pub fn parse() -> Self { Parser::parse() } }