Reputation: 33076
In Clap, we can use enum as the input for the cli according to https://docs.rs/clap/latest/clap/trait.ValueEnum.html:
#[derive(clap::Parser)]
struct Args {
#[clap(value_enum)]
level: Level,
}
#[derive(clap::ValueEnum, Clone)]
enum Level {
Debug,
Info,
Warning,
Error,
}
We can provide default like so:
struct Args {
#[clap(value_enum, default_value="debug")]
level: Level,
}
This works. However, is there a way to provide default value in a type-safe way?
Upvotes: 15
Views: 7250
Reputation: 22738
Use 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());
}
Args { level: Debug }
Upvotes: 26