Subcomandos en Rust
Un binario, varios verbos: un enum de subcomandos, cada uno con sus propios argumentos.
use clap::{Parser, Subcommand};
#[derive(Parser)]
struct Cli {
#[arg(long, global = true)]
quiet: bool,
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
/// Play a tour step
Play { lang: String, idx: u32 },
/// Show your statistics
Stats {
#[arg(long, default_value = "week")]
window: String,
},
}
fn main() {
let cli = Cli::parse();
match cli.command {
Command::Play { lang, idx } => println!("playing {lang} step {idx}"),
Command::Stats { window } => println!("stats for the {window}"),
}
if !cli.quiet {
println!("done");
}
}
Cómo funciona
#[derive(Subcommand)]en un enum da una variante por verbo.- El struct padre lleva los flags globales.
- Hacer match sobre el enum despacha el trabajo.
Palabras clave y builtins usados aquí
Stringboolenumfnifletmatchstructu32use
El intento, en números
- Líneas
- 32
- Caracteres a escribir
- 563
- Tokens
- 133
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 80 segundos.
Paso 4 de 5 en Argumentos; paso 4 de 12 en Herramientas CLI y clientes HTTP.