Attributes
#[structopt(...)] attributes fall into two categories:
-
structopt's own magical methods.They are used by
structoptitself. They come mostly inattr = ["whatever"]form, but someattr(args...)also exist. -
They represent explicit
clap::Arg/Appmethod calls. They are what used to be explicit#[structopt(raw(...))]attrs in pre-0.3structopt
Every #[structopt(...)] attribute looks like comma-separated sequence of methods:
#[structopt(
short, // method with no arguments - always magical
long = "--long-option", // method with one argument
required_if("out", "file"), // method with one and more args
parse(from_os_str = path::to::parser) // some magical methods have their own syntax
)]
#[structopt(...)] attributes can be placed on top of struct, enum,
struct field or enum variant. Attributes on top of struct or enum
represent clap::App method calls, field or variant attributes correspond
to clap::Arg method calls.
In other words, the Opt struct from the example above
will be turned into this (details omitted):
#![allow(unused_variables)] fn main() { use structopt::clap::{Arg, App}; App::new("example") .version("0.2.0") .about("An example of StructOpt usage.") .arg(Arg::with_name("debug") .help("Activate debug mode") .short("debug") .long("debug")) .arg(Arg::with_name("speed") .help("Set speed") .short("v") .long("velocity") .default_value("42")) // and so on ; }