Default values

In clap, default values for options can be specified via Arg::default_value.

Of course, you can use as a raw method:

# use structopt::StructOpt;
#[derive(StructOpt)]
struct Opt {
    #[structopt(default_value = "", long)]
    prefix: String
}

This is quite mundane and error-prone to type the "..." default by yourself, especially when the Rust ecosystem uses the Default trait for that. It would be wonderful to have structopt to take the Default_default and fill it for you. And yes, structopt can do that.

Unfortunately, default_value takes &str but Default::default gives us some Self value. We need to map Self to &str somehow.

structopt solves this problem via ToString trait.

To be able to use auto-default the type must implement both Default and ToString:

# use structopt::StructOpt;
#[derive(StructOpt)]
struct Opt {
    // just leave the `= "..."` part and structopt will figure it for you
    #[structopt(default_value, long)]
    prefix: String // `String` implements both `Default` and `ToString`
}