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.