diff options
Diffstat (limited to 'argparse/README.rst')
-rw-r--r-- | argparse/README.rst | 341 |
1 files changed, 0 insertions, 341 deletions
diff --git a/argparse/README.rst b/argparse/README.rst deleted file mode 100644 index 8a3fca0..0000000 --- a/argparse/README.rst +++ /dev/null @@ -1,341 +0,0 @@ -======== -Argparse -======== - -The ``rust-argparse`` is command-line parsing module for rust. It's inspired -by python's ``argparse`` module. - -Features: - -* Supports standard (GNU) option conventions -* Properly typed values -* Automatically generated help and usage messages - -Importing -========= -Edit your Cargo.toml to add ``rust-argparse`` to your project. - -.. code-block:: rust - - [dependencies] - argparse = "0.2.2" - - -Example -======= - -The following code is a simple Rust program with command-line arguments: - -.. code-block:: rust - - extern crate argparse; - - use argparse::{ArgumentParser, StoreTrue, Store}; - - fn main() { - let mut verbose = false; - let mut name = "World".to_string(); - { // this block limits scope of borrows by ap.refer() method - let mut ap = ArgumentParser::new(); - ap.set_description("Greet somebody."); - ap.refer(&mut verbose) - .add_option(&["-v", "--verbose"], StoreTrue, - "Be verbose"); - ap.refer(&mut name) - .add_option(&["--name"], Store, - "Name for the greeting"); - ap.parse_args_or_exit(); - } - - if verbose { - println!("name is {}", name); - } - println!("Hello {}!", name); - } - -Assuming the Rust code above is saved into a file ``greeting.rs``, let's see -what we have now:: - - $ rustc greeting.rs - $ ./greeting -h - Usage: - ./greeting [OPTIONS] - - Greet somebody. - - Optional arguments: - -h, --help Show this help message and exit - -v, --verbose - Be verbose - --name NAME Name for the greeting - $ ./greeting - Hello World! - $ ./greeting --name Bob - Hello Bob! - $ ./greeting -v --name Alice - name is Alice - Hello Alice! - - -Basic Workflow -============== - - -Create ArgumentParser ---------------------- - -The argument parser is created empty and is built incrementally. So we create -a mutable variable:: - - extern crate argparse; - use argparse::ArgumentParser; - - let mut parser = ArgumentParser::new(); - - -Customize ---------- - -There are optional customization methods. The most important one is:: - - parser.set_description("My command-line utility") - -The descripion is rewrapped to fit 80 column string nicely. Just like option -descriptions. - -Add Options ------------ - -The ``refer`` method creates a cell variable, which the result will be written -to:: - - let mut verbose = false; - parser.refer(&mut verbose); - -Next we add an options which control the variable: -For example:: - - parser.refer(&mut verbose) - .add_option(&["-v", "--verbose"], StoreTrue, - "Be verbose"); - -You may add multiple options for the same variable:: - - parser.refer(&mut verbose) - .add_option(&["-v", "--verbose"], StoreTrue, - "Be verbose") - .add_option(&["-q", "--quiet"], StoreFalse, - "Be verbose"); - -Similarly positional arguments are added:: - - let mut command = String; - parser.refer(&mut command) - .add_argument("command", Store, - "Command to run"); - - - -Organizing Options ------------------- - -It's often useful to organize options into some kind of structure. You can -easily borrow variables from the structure into option parser. For example:: - - struct Options { - verbose: bool, - } - ... - let mut options = Options { verbose: false }; - parser.refer(&mut options.verbose) - .add_option(&["-v"], StoreTrue, - "Be verbose"); - - -Parsing Arguments ------------------ - -All the complex work is done in ``parser.parse_args()``. But there is -a simpler option:: - - parser.parse_args_or_exit() - -In case you don't want argparse to exit itself, you might use the -``parse_args`` function directly:: - - use std::process::exit; - - match parser.parse_args() { - Ok(()) => {} - Err(x) => { - std::process::exit(x); - } - } - - -ArgumentParser Methods -====================== - -``parser.refer<T>(var: &mut T) -> Ref`` - Attach the variable to argument parser. The options are added to the - returned ``Ref`` object and modify a variable passed to the method. - -``parser.add_option(names: &[&str], action: TypedAction, help: &str)`` - Add a single option which has no parameters. Most options must be added - by ``refer(..)`` and methods on ``Ref`` object (see below). - - Example:: - - ap.add_option(&["-V", "--version"], - Print(env!("CARGO_PKG_VERSION").to_string()), "Show version"); - -``parser.set_description(descr: &str)`` - Set description that is at the top of help message. - -``parser.stop_on_first_argument(val: bool)`` - If called with ``true``, parser will stop searching for options when first - non-option (the one doesn't start with ``-``) argument is encountered. This - is useful if you want to parse following options with another argparser or - external program. - -``parser.silence_double_dash(val: bool)`` - If called with ``true`` (default), parser will not treat *first* double - dash ``--`` as positional argument. Use ``false`` if you need to add some - meaning to the ``--`` marker. - -``parser.print_usage(name: &str, writer: &mut Write)`` - Prints usage string to stderr. - -``parser.print_help(name: &str, writer: &mut Write)`` - Writes help to ``writer``, used by ``--help`` option internally. - -``parser.parse_args()`` - Method that does all the dirty work. And returns ``Result`` - -``parser.parse_args_or_exit()`` - Method that does all the dirty work. And in case of failure just ``exit()`` - - -Variable Reference Methods -========================== - -The ``argparse::Ref`` object is returned from ``parser.refer()``. -The following methods are used to add and customize arguments: - -``option.add_option(names: &[&str], action: TypedAction, help: &str)`` - Add an option. All items in names should be either in format ``-X`` or - ``--long-option`` (i.e. one dash and one char or two dashes and long name). - How this option will be interpreted and whether it will have an argument - dependes on the action. See below list of actions. - -``option.add_argument(name: &str, action: TypedAction, help: &str)`` - Add a positional argument - -``option.metavar(var: &str)`` - A name of the argument in usage messages (for options having argument). - -``option.envvar(var: &str)`` - A name of the environment variable to get option value from. The value - would be parsed with ``FromStr::from_str``, just like an option having - ``Store`` action. - -``option.required()`` - The option or argument is required (it's optional by default). If multiple - options or multiple arguments are defined for this reference at least one - of them is required. - - -Actions -======= - -The following actions are available out of the box. They may be used in either -``add_option`` or ``add_argument``: - -``Store`` - An option has single argument. Stores a value from command-line in a - variable. Any type that has the ``FromStr`` and ``Clone`` traits implemented - may be used. - -``StoreOption`` - As ``Store``, but wrap value with ``Some`` for use with ``Option``. For - example: - - let mut x: Option<i32> = None; - ap.refer(&mut x).add_option(&["-x"], StoreOption, "Set var x"); - -``StoreConst(value)`` - An option has no arguments. Store a hard-coded ``value`` into variable, - when specified. Any type with the ``Clone`` trait implemented may be used. - -``PushConst(value)`` - An option has no arguments. Push a hard-coded ``value`` into variable, - when specified. Any type which has the ``Clone`` type implemented may be - used. Option might used for a list of operations to perform, when ``required`` - is set for this variable, at least one operation is required. - -``StoreTrue`` - Stores boolean ``true`` value in a variable. - (shortcut for ``StoreConst(true)``) - -``StoreFalse`` - Stores boolean ``false`` value in a variable. - (shortcut for ``StoreConst(false)``) - - -``IncrBy(num)`` - An option has no arguments. Increments the value stored in a variable by a - value ``num``. Any type which has the ``Add`` and ``Clone`` traits may be used. - -``DecrBy(nym)`` - Decrements the value stored in a variable by a value ``num``. Any type - which has the ``Add`` and ``Clone`` traits may be used. - -``Collect`` - When used for an ``--option``, requires single argument. When used for a - positional argument consumes all remaining arguments. Parsed options are - added to the list. I.e. a ``Collect`` action requires a - ``Vec<int>`` variable. Parses arguments using ``FromStr`` trait. - -``List`` - When used for positional argument, works the same as ``List``. When used - as an option, consumes all remaining arguments. - - Note the usage of ``List`` is strongly discouraged, because of complex - rules below. Use ``Collect`` and positional options if possible. But usage - of ``List`` action may be useful if you need shell expansion of anything - other than last positional argument. - - Let's learn rules by example. For the next options:: - - ap.refer(&mut lst1).add_option(&["-X", "--xx"], List, "List1"); - ap.refer(&mut lst2).add_argument("yy", List, "List2"); - - The following command line:: - - ./run 1 2 3 -X 4 5 6 - - Will return ``[1, 2, 3]`` in the ``lst1`` and the ``[4,5,6]`` in the - ``lst2``. - - Note that using when using ``=`` or equivalent short option mode, the - 'consume all' mode is not enabled. I.e. in the following command-line:: - - ./run 1 2 -X3 4 --xx=5 6 - - The ``lst1`` has ``[3, 5]`` and ``lst2`` has ``[1, 2, 4, 6]``. - The argument consuming also stops on ``--`` or the next option:: - - ./run: -X 1 2 3 -- 4 5 6 - ./run: -X 1 2 --xx=3 4 5 6 - - Both of the above parse ``[4, 5, 6]`` as ``lst1`` and - the ``[1, 2, 3]`` as the ``lst2``. - -``Print(value)`` - Print the text and exit (with status ``0``). Useful for ``--version`` - option:: - - ap.add_option(&["-V", "--version"], - Print(env!("CARGO_PKG_VERSION").to_string()), "Show version"); - - |