#![allow(dead_code)]
use structconf::{clap, StructConf};
use strum_macros::{Display, EnumString};
#[derive(Debug, Display, EnumString)]
pub enum Count {
One,
Two,
Three,
}
impl Default for Count {
fn default() -> Self {
Count::One
}
}
#[derive(Debug, StructConf)]
struct Config {
#[conf(help = "description for the argument parser.")]
pub default: i32,
#[conf(no_file, help = "not available in the config file")]
pub args_opt: u8,
#[conf(no_short, no_long)]
pub conf_opt: String,
#[conf(no_short, no_long, no_file)]
pub ignored: bool,
#[conf(
short = "x",
long = "renamed-opt",
file = "my_opt",
help = "custom names."
)]
pub renamed: String,
#[conf(
negated_arg,
short = "n",
long = "no-pancakes",
help = "disable pancakes."
)]
pub pancakes: bool,
#[conf(help = "default: 123.45", default = "123.45")]
pub floating: f64,
#[conf(no_short, no_long)]
pub optional_field: Option<String>,
#[conf(help = "custom type")]
pub count: Count,
}
pub fn main() {
let app = clap::App::new("demo");
let conf = Config::parse(app, "config.ini");
println!("Parsed config: {:#?}", conf);
}