2015-03-19 21:55:13 +00:00
|
|
|
extern crate clap;
|
|
|
|
|
|
|
|
use clap::{App, Arg};
|
|
|
|
|
2015-08-30 19:43:38 +00:00
|
|
|
#[allow(unused_variables)]
|
2015-03-19 21:55:13 +00:00
|
|
|
fn main() {
|
|
|
|
// Args describe a possible valid argument which may be supplied by the user at runtime. There
|
|
|
|
// are three different types of arguments (flags, options, and positional) as well as a fourth
|
2015-05-06 00:21:13 +00:00
|
|
|
// special type of argument, called SubCommands (which will be discussed separately).
|
2015-03-19 21:55:13 +00:00
|
|
|
//
|
|
|
|
// Args are described in the same manner as Apps using the "builder pattern" with multiple
|
2015-04-14 02:18:50 +00:00
|
|
|
// methods describing various settings for the individual arguments. Or by supplying a "usage"
|
|
|
|
// string. Both methods have their pros and cons.
|
2015-03-19 21:55:13 +00:00
|
|
|
//
|
2015-04-14 02:18:50 +00:00
|
|
|
// Arguments can be added to applications in two manners, one at a time with the arg(), and
|
|
|
|
// arg_from_usage() method, or multiple arguments at once via a Vec<Arg> inside the args() method,
|
|
|
|
// or a single &str describing multiple Args (one per line) supplied to args_from_usage().
|
2015-03-19 21:55:13 +00:00
|
|
|
//
|
|
|
|
// There are various options which can be set for a given argument, some apply to any of the
|
|
|
|
// three types of arguments, some only apply one or two of the types. *NOTE* if you set
|
2015-03-20 16:47:28 +00:00
|
|
|
// incompatible options on a single argument, clap will panic! at runtime. This is by design,
|
2015-04-14 02:18:50 +00:00
|
|
|
// so that you know right away an error was made by the developer, not the end user.
|
2015-03-19 21:55:13 +00:00
|
|
|
//
|
|
|
|
// # Help and Version
|
|
|
|
// clap automatically generates a help and version flag for you, unless you specificy your
|
2015-06-17 00:46:11 +00:00
|
|
|
// own. By default help uses "-h" and "--help", and version uses "-V" and "--version". You can
|
|
|
|
// safely overide "-V" and "-h" to your own arguments, and "--help" and "--version" will stil
|
2015-03-19 21:55:13 +00:00
|
|
|
// be automatically generated for you.
|
|
|
|
let matches = App::new("MyApp")
|
|
|
|
// All application settings go here...
|
2015-03-20 16:47:28 +00:00
|
|
|
|
2015-04-14 02:18:50 +00:00
|
|
|
// A simple "Flag" argument example (i.e. "-d") using the builder pattern
|
|
|
|
.arg(Arg::with_name("debug")
|
2015-03-20 16:47:28 +00:00
|
|
|
.help("turn on debugging information")
|
|
|
|
.short("d"))
|
|
|
|
|
|
|
|
// Two arguments, one "Option" argument (i.e. one that takes a value) such
|
|
|
|
// as "-c some", and one positional argument (i.e. "myapp some_file")
|
|
|
|
.args( vec![
|
2015-04-14 02:18:50 +00:00
|
|
|
Arg::with_name("config")
|
2015-03-20 16:47:28 +00:00
|
|
|
.help("sets the config file to use")
|
|
|
|
.short("c")
|
|
|
|
.long("config"),
|
2015-04-14 02:18:50 +00:00
|
|
|
Arg::with_name("input")
|
2015-03-20 16:47:28 +00:00
|
|
|
.help("the input file to use")
|
|
|
|
.index(1)
|
|
|
|
.required(true)
|
|
|
|
])
|
2015-04-14 02:18:50 +00:00
|
|
|
|
|
|
|
// *Note* the following two examples are convienience methods, if you wish
|
|
|
|
// to still get the full configurability of Arg::with_name() and the readability
|
|
|
|
// of arg_from_usage(), you can instantiate a new Arg with Arg::from_usage() and
|
|
|
|
// still be able to set all the additional properties, just like Arg::with_name()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// One "Flag" using a usage string
|
|
|
|
.arg_from_usage("--license 'display the license file'")
|
|
|
|
|
|
|
|
// Two args, one "Positional", and one "Option" using a usage string
|
|
|
|
.args_from_usage("[output] 'Supply an output file to use'
|
|
|
|
-i --int=[interface] 'Set an interface to use'")
|
2015-03-19 21:55:13 +00:00
|
|
|
.get_matches();
|
|
|
|
|
|
|
|
// Continued program logic goes here...
|
|
|
|
}
|