Skip to main content

Module defaults

Module defaults 

Source
Expand description

§Default Values

Use default_value = "..." when the default is most naturally written as command-line text, and default_value_t = expr when it is a typed value:

use getargs_derive::GetArgs;

#[derive(GetArgs)]
struct Server<'a> {
    #[arg(long, default_value = "127.0.0.1")]
    host: &'a str,
    #[arg(short, long, default_value = "8080")]
    port: u16,
    #[arg(short, long, default_value_t = 4)]
    workers: u32,
}

let server = Server::from_args(["-p", "3000"].into_iter())?;
assert_eq!(server.host, "127.0.0.1");
assert_eq!(server.port, 3000);
assert_eq!(server.workers, 4);

A default_value string is only parsed when the argument is absent; if it does not parse, parse returns Error::InvalidValue. A field may have at most one default.

Arguments without a default are required, unless they are Option<T>. Positional arguments with a default are optional, and must come after all required positional arguments:

use getargs_derive::GetArgs;

#[derive(GetArgs)]
struct Copy<'a> {
    source: &'a str,
    #[arg(default_value = "out.txt")]
    destination: &'a str,
}

let copy = Copy::from_args(["in.txt"].into_iter())?;
assert_eq!(copy.destination, "out.txt");

In the generated help, defaults are shown as [default: value], except on flags. See Generated Help.

§Compile-Time Diagnostics

The macro reports a compile error, pointing at the offending attribute or field, for:

  • more than one default on the same field, or any default on an Option<T> field.