pub enum Error {
Usage(String),
Argv(String),
NoMatch,
Deserialize(String),
WithProgramUsage(Box<Error>, String),
Help,
Version(String),
}
Expand description
Represents the different types of Docopt errors.
This error type has a lot of variants. In the common case, you probably
don’t care why Docopt has failed, and would rather just quit the program
and show an error message instead. The exit
method defined on the Error
type will do just that. It will also set the exit code appropriately
(no error for --help
or --version
, but an error code for bad usage,
bad argv, no match or bad decode).
§Example
Generally, you want to parse the usage string, try to match the argv and then quit the program if there was an error reported at any point in that process. This can be achieved like so:
use docopt::Docopt;
const USAGE: &'static str = "
Usage: ...
";
let args = Docopt::new(USAGE)
.and_then(|d| d.parse())
.unwrap_or_else(|e| e.exit());
Variants§
Usage(String)
Parsing the usage string failed.
This error can only be triggered by the programmer, i.e., the writer of the Docopt usage string. This error is usually indicative of a bug in your program.
Argv(String)
Parsing the argv specified failed.
The payload is a string describing why the arguments provided could not be parsed.
This is distinct from NoMatch
because it will catch errors like
using flags that aren’t defined in the usage string.
NoMatch
The given argv parsed successfully, but it did not match any example usage of the program.
Regrettably, there is no descriptive message describing why the given argv didn’t match any of the usage strings.
Deserialize(String)
This indicates a problem deserializing a successful argv match into a deserializable value.
WithProgramUsage(Box<Error>, String)
Parsing failed, and the program usage should be printed next to the
failure message. Typically this wraps Argv
and NoMatch
errors.
Help
Decoding or parsing failed because the command line specified that the help message should be printed.
Version(String)
Decoding or parsing failed because the command line specified that the version should be printed
The version is included as a payload to this variant.
Implementations§
Source§impl Error
impl Error
Sourcepub fn fatal(&self) -> bool
pub fn fatal(&self) -> bool
Return whether this was a fatal error or not.
Non-fatal errors include requests to print the help or version information of a program, while fatal errors include those such as failing to decode or parse.
Sourcepub fn exit(&self) -> !
pub fn exit(&self) -> !
Print this error and immediately exit the program.
If the error is non-fatal (e.g., Help
or Version
), then the
error is printed to stdout and the exit status will be 0
. Otherwise,
when the error is fatal, the error is printed to stderr and the
exit status will be 1
.
Examples found in repository?
More examples
34 35 36 37 38 39 40 41 42 43 44 45
fn main() {
let args: Args = Docopt::new(USAGE)
.and_then(|d| d.deserialize())
.unwrap_or_else(|e| e.exit());
println!("{:?}", args);
println!("\nSome values:");
println!(" Speed: {}", args.flag_speed);
println!(" Drifting? {}", args.flag_drifting);
println!(" Names: {:?}", args.arg_name);
println!(" Command 'ship' invoked? {:?}", args.cmd_ship);
}
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
fn main() {
let version = "1.2.3".to_owned();
let args = Docopt::new(USAGE)
.and_then(|dopt| dopt.version(Some(version)).parse())
.unwrap_or_else(|e| e.exit());
println!("{:?}", args);
// You can conveniently access values with `get_{bool,count,str,vec}`
// functions. If the key doesn't exist (or if, e.g., you use `get_str` on
// a switch), then a sensible default value is returned.
println!("\nSome values:");
println!(" Speed: {}", args.get_str("--speed"));
println!(" Drifting? {}", args.get_bool("--drifting"));
println!(" Names: {:?}", args.get_vec("<name>"));
println!(" Command 'ship' invoked? {:?}", args.get_bool("ship"));
}
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn StdError + 'static)>
fn source(&self) -> Option<&(dyn StdError + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl Error for Error
impl Error for Error
Source§fn custom<T: Display>(msg: T) -> Self
fn custom<T: Display>(msg: T) -> Self
Source§fn invalid_type(unexp: Unexpected<'_>, exp: &dyn Expected) -> Self
fn invalid_type(unexp: Unexpected<'_>, exp: &dyn Expected) -> Self
Deserialize
receives a type different from what it was
expecting. Read moreSource§fn invalid_value(unexp: Unexpected<'_>, exp: &dyn Expected) -> Self
fn invalid_value(unexp: Unexpected<'_>, exp: &dyn Expected) -> Self
Deserialize
receives a value of the right type but that
is wrong for some other reason. Read moreSource§fn invalid_length(len: usize, exp: &dyn Expected) -> Self
fn invalid_length(len: usize, exp: &dyn Expected) -> Self
Source§fn unknown_variant(variant: &str, expected: &'static [&'static str]) -> Self
fn unknown_variant(variant: &str, expected: &'static [&'static str]) -> Self
Deserialize
enum type received a variant with an
unrecognized name.Source§fn unknown_field(field: &str, expected: &'static [&'static str]) -> Self
fn unknown_field(field: &str, expected: &'static [&'static str]) -> Self
Deserialize
struct type received a field with an
unrecognized name.Source§fn missing_field(field: &'static str) -> Self
fn missing_field(field: &'static str) -> Self
Deserialize
struct type expected to receive a required
field with a particular name but that field was not present in the
input.Source§fn duplicate_field(field: &'static str) -> Self
fn duplicate_field(field: &'static str) -> Self
Deserialize
struct type received more than one of the
same field.