env_logger/
env_logger.rs

1//! convert verbosty level from count of -v flags into enum from a logger crate of your choice
2
3use bpaf::*;
4
5// generally you'd use this from the log crate itself
6#[derive(Debug, Copy, Clone)]
7pub enum LevelFilter {
8    Off,
9    Error,
10    Warn,
11    Info,
12    Debug,
13    Trace,
14}
15
16#[derive(Bpaf)]
17#[bpaf(options)]
18#[allow(dead_code)]
19#[derive(Debug, Clone)]
20struct Options {
21    #[bpaf(external)]
22    verbose: LevelFilter,
23    /// number of potatoes
24    #[bpaf(fallback(3))]
25    potato: usize,
26}
27
28fn verbose() -> impl Parser<LevelFilter> {
29    short('v')
30        .help("Verbosity level, use multiple times for more verbosity")
31        .req_flag(())
32        .count()
33        .map(|l| {
34            use LevelFilter::*;
35            [Off, Error, Warn, Info, Debug, Trace][l.clamp(0, 5)]
36        })
37}
38
39fn main() {
40    println!("{:#?}", options().run());
41}