use clap::{Args, Parser, Subcommand}; #[derive(Parser)] #[clap(author, version, about, long_about = None)] #[clap(propagate_version = true)] struct Cli { #[clap(subcommand)] command: Commands, } #[derive(Subcommand)] enum Commands { /// Adds files to myapp Add(Add), } #[derive(Args)] struct Add { #[clap(value_parser)] name: Option, } fn main() { let cli = Cli::parse(); // You can check for the existence of subcommands, and if found use their // matches just as you would the top level cmd match &cli.command { Commands::Add(name) => { println!("'myapp add' was used, name is: {:?}", name.name) } } }