在 Rust Clap CLI 中为 ArgEnum 提供默认值

Yuc*_*ong 11 rust clap

在 Clap 中,我们可以根据https://docs.rs/clap/latest/clap/trait.ValueEnum.html使用 enum 作为 cli 的输入:

#[derive(clap::Parser)]
struct Args {
   #[clap(value_enum)]
   level: Level,
}

#[derive(clap::ValueEnum, Clone)]
enum Level {
   Debug,
   Info,
   Warning,
   Error,
}
Run Code Online (Sandbox Code Playgroud)

我们可以像这样提供默认值:

struct Args {
   #[clap(value_enum, default_value="debug")]
   level: Level,
}
Run Code Online (Sandbox Code Playgroud)

这有效。但是,有没有办法以类型安全的方式提供默认值?

Fin*_*nis 19

使用default_value_t

use clap::{Parser, ValueEnum};

#[derive(Parser, Debug)]
struct Args {
    #[clap(value_enum, default_value_t=Level::Debug)]
    level: Level,
}

#[derive(ValueEnum, Clone, Debug)]
enum Level {
    Debug,
    Info,
    Warning,
    Error,
}

fn main() {
    println!("{:?}", Args::parse());
}
Run Code Online (Sandbox Code Playgroud)
Args { level: Debug }
Run Code Online (Sandbox Code Playgroud)