pub struct Args { /* private fields */ }
Expand description

Arguments

Notes

  • sub_args() are not verified. They are the ones after -- phrase, which (often) are meant for being passed to sub processes.

Implementations

Gets the command

This is simply the first one of args().

Gets arguments

If it’s some vector, the vector is not empty.

The first one can be used as a command, via cmd().

Gets raw options

Normally you don’t need this. Instead, you can use get(), get_vec()

Sub arguments

If it’s some vector, the vector is not empty.

Transforms into sub command

For example:

  • Command line:

    ~> program help version 1
  • Parsed as:

    help version 1
  • After calling this function:

    version 1
use dia_args;

const CMD_VERSION: &str = "version";

let (cmd, args) = dia_args::parse()?.into_sub_cmd();
match cmd.as_ref().map(|s| s.as_str()) {
    Some(CMD_VERSION) => if args.is_empty() {
        println!("Version: ...");
    } else {
        eprintln!("{:?} command doesn't take arguments", CMD_VERSION);
    },
    Some(other) => eprintln!("Command {:?} not supported", other),
    None => eprintln!("Missing command"),
};
Gets a value

You can provide multiple keys as you want. But the user can only provide one single key of them. This function can be used for short version and long version of your keys.

Examples
use dia_args;

let args = dia_args::parse_strings(["--type", "ogg"].iter())?;
assert_eq!(args.get::<String>(&["-t", "--type"])?.unwrap(), "ogg");

let args = dia_args::parse_strings(["--type", "ogg"].iter())?;
assert!(args.get::<String>(&["-t"])?.is_none());

let args = dia_args::parse_strings(["--type", "ogg", "-t", "some"].iter())?;
args.get::<String>(&["-t", "--type"]).unwrap_err();
Calls get() and removes the keys if the result is Ok(Some)
Examples
use dia_args;

let mut args = dia_args::parse_strings(["--type", "rs"].iter())?;
assert_eq!(args.take::<String>(&["--type"])?.unwrap(), "rs");
assert!(args.get::<String>(&["--type"])?.is_none());
Gets a vector of values
Examples
use dia_args;

let args = dia_args::parse_strings(
    ["--type", "ogg", "-t", "m4v", "--type", "md", "-t", "rs"].iter()
)?;
let mut types = args.get_vec::<String>(&["-t", "--type"])?.unwrap();
types.sort();
assert_eq!(types, &["m4v", "md", "ogg", "rs"]);
Calls get_vec() and removes the keys if the result is Ok(Some)
Examples
use dia_args;

let mut args = dia_args::parse_strings(["-l", "c", "-l", "c++"].iter())?;
let mut languages = args.take_vec::<String>(&["-l"])?.unwrap();
languages.sort();
assert_eq!(languages, &["c", "c++"]);
assert!(args.is_empty());
Takes arguments out
Examples
use dia_args;

let mut args = dia_args::parse_strings(["do", "this", "--faster=true"].iter())?;
assert_eq!(args.take_args().unwrap(), &["do", "this"]);
Takes sub arguments out
Examples
use dia_args;

let mut args = dia_args::parse_strings(
    ["eat", "chicken", "--", "with", "ronnie-coleman"].iter()
)?;
assert_eq!(args.take_sub_args().unwrap(), &["with", "ronnie-coleman"]);
Merges options with other
  • This function works on options, not commands/stdin flag/sub arguments…
  • Other’s options will be taken out, if conditions are met.
  • Result is number of items merged.
Parameters
  • filter:

    • If you provide some sets of keys, only those (from other) are accepted.
    • If you provide an empty slice, or any of its items is empty, an error is returned.
Examples

Your program allows the user to set options from file. Later you want to give the user new ability to set options via command line, overwriting the ones from file. Then this function can help.

use dia_args::MergeOption;

const OPTION_DEBUG: &[&str] = &["-d", "--debug"];
const OPTION_PORT: &[&str] = &["--port"];

// Here in test, we're parsing from strings.
// In real code, you might want to use dia_args::parse_file()
let mut args_from_file = dia_args::parse_strings(
    ["--debug=false", "--port=6789"].iter()
)?;

// Command line arguments
let mut cmd_line_args = dia_args::parse_strings(
    ["-d=true", "--address", "localhost"].iter()
)?;

// Merge
let count = cmd_line_args.merge_options(
    &mut args_from_file, &[OPTION_DEBUG, OPTION_PORT], MergeOption::IgnoreExisting,
)?;
assert_eq!(count, 1);

// Verify
assert_eq!(cmd_line_args.get(OPTION_DEBUG)?, Some(true));
assert_eq!(cmd_line_args.get::<String>(&["--address"])?.unwrap(), "localhost");
assert_eq!(cmd_line_args.get::<u16>(OPTION_PORT)?, Some(6789));

Trait Implementations

Converts this type into a shared reference of the (usually inferred) input type.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.