typestar

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

  1. #[derive(Subcommand)] en un enum da una variante por verbo.
  2. El struct padre lleva los flags globales.
  3. Hacer match sobre el enum despacha el trabajo.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 5 en Argumentos; paso 4 de 12 en Herramientas CLI y clientes HTTP.

← Anterior Siguiente →