clap/src/app/errors.rs

193 lines
5.4 KiB
Rust
Raw Normal View History

use std::error::Error;
use std::fmt;
/// Command line argument parser error types
#[derive(PartialEq, Debug)]
pub enum ClapErrorType {
/// Error occurs when some possible values were set, but clap found unexpected value
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug").index(1)
/// .possible_value("fast")
/// .possible_value("slow")
/// # ).get_matches_from_safe(vec!["", "other"]);
2015-09-05 22:12:46 +00:00
/// ```
InvalidValue,
/// Error occurs when clap found unexpected flag or option
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::from_usage("-f, --flag 'some flag'")
/// # ).get_matches_from_safe(vec!["", "--other"]);
2015-09-05 22:12:46 +00:00
/// ```
InvalidArgument,
/// Error occurs when clap found unexpected subcommand
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg, SubCommand};
/// # let result = App::new("myprog")
/// # .subcommand(
/// SubCommand::with_name("conifg")
/// .about("Used for configuration")
/// .arg(Arg::with_name("config_file")
/// .help("The configuration file to use")
/// .index(1))
/// # ).get_matches_from_safe(vec!["", "other"]);
2015-09-05 22:12:46 +00:00
/// ```
InvalidSubcommand,
/// Error occurs when option does not allow empty values but some was found
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug")
/// .empty_values(false))
/// # .arg(
/// # Arg::with_name("color")
/// # ).get_matches_from_safe(vec!["", "--debug", "--color"]);
2015-09-05 22:12:46 +00:00
/// ```
EmptyValue,
/// Parser inner error
OptionError,
/// Parser inner error
ArgumentError,
/// Parser inner error
ValueError,
/// Error occurs when argument got more values then were expected
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug").index(1)
/// .max_values(2)
/// # ).get_matches_from_safe(vec!["", "too", "much", "values"]);
2015-09-05 22:12:46 +00:00
/// ```
TooMuchValues,
/// Error occurs when argument got less values then were expected
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug").index(1)
/// .min_values(3)
/// # ).get_matches_from_safe(vec!["", "too", "few"]);
2015-09-05 22:12:46 +00:00
/// ```
TooFewValues,
/// Error occurs when clap find two ore more conflicting arguments
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug")
/// .conflicts_with("color")
/// # ).get_matches_from_safe(vec!["", "--debug", "--color"]);
2015-09-05 22:12:46 +00:00
/// ```
ArgumentConflict,
/// Error occurs when one or more required arguments missing
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug")
/// .required(true)
/// # ).get_matches_from_safe(vec![""]);
2015-09-05 22:12:46 +00:00
/// ```
MissingRequiredArgument,
/// Error occurs when required subcommand missing
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg, AppSettings, SubCommand};
/// # let result = App::new("myprog")
/// # .setting(AppSettings::SubcommandRequired)
/// # .subcommand(
/// SubCommand::with_name("conifg")
/// .about("Used for configuration")
/// .arg(Arg::with_name("config_file")
/// .help("The configuration file to use")
/// .index(1))
/// # ).get_matches_from_safe(vec![""]);
2015-09-05 22:12:46 +00:00
/// ```
MissingSubcommand,
/// Error occurs when clap find argument while is was not expecting any
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App};
/// # let result = App::new("myprog").get_matches_from_safe(vec!["", "--arg"]);
2015-09-05 22:12:46 +00:00
/// ```
UnexpectedArgument,
/// Error occurs when argument was used multiple times and was not set as multiple.
///
///
/// # Example
///
/// ```no_run
/// # use clap::{App, Arg};
/// # let result = App::new("myprog")
/// # .arg(
/// # Arg::with_name("debug")
/// .multiple(false)
/// # ).get_matches_from_safe(vec!["", "--debug", "--debug"]);
2015-09-05 22:12:46 +00:00
/// ```
UnexpectedMultipleUsage
}
/// Command line argument parser error
#[derive(Debug)]
pub struct ClapError {
/// Formated error message
pub error: String,
/// Command line argument parser error type
pub error_type: ClapErrorType
}
impl Error for ClapError {
fn description(&self) -> &str {
&*self.error
}
}
impl fmt::Display for ClapError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.error)
}
}