2 releases

0.4.6 Apr 15, 2021
0.4.5 Apr 15, 2021

#191 in Command-line interface

24 downloads per month
Used in structopt-yaml


164 lines


An default value loader from YAML for structopt. It combinates with structopt.

Actions Status Crates.io Docs.rs codecov


This crate must be used with serde, serde_derive, structopt, and toml explicitly.

serde          = "1.0"
serde_derive   = "1.0"
serde_yaml     = "0.8"
structopt      = "0.3.21"
structopt-yaml = "0.4.6"


If derive(Deserialize), derive(StructOptYaml) and serde(default) are added to the struct with derive(StructOpt), some functions like from_args_with_yaml can be used.

use serde_derive::Deserialize;
use structopt::StructOpt;
use structopt_yaml::StructOptYaml;

#[derive(Debug, Deserialize, StructOpt, StructOptYaml)]
struct Opt {
    #[structopt(default_value = "0", short = "a")] a: i32,
    #[structopt(default_value = "0", short = "b")] b: i32,

fn main() {
    let yaml_str = r#"
        a: 10
    let opt = Opt::from_args_with_yaml(yaml_str).expect("yaml parse failed");
    println!("a:{}", opt.a);
    println!("b:{}", opt.b);

The execution result is below.

$ ./example
a:10        // value from YAML string
b:0         // value from default_value of structopt

$ ./example -a 20
a:20        // value from command line argument


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~19K SLoC