Enum ArgAction
#[non_exhaustive]pub enum ArgAction {
Set,
Append,
SetTrue,
SetFalse,
Count,
Help,
HelpShort,
HelpLong,
Version,
}
Expand description
Behavior of arguments when they are encountered while parsing
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("special-help")
.short('?')
.action(clap::ArgAction::Help)
);
// Existing help still exists
let err = cmd.clone().try_get_matches_from(["mycmd", "-h"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
// New help available
let err = cmd.try_get_matches_from(["mycmd", "-?"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Set
When encountered, store the associated value(s) in ArgMatches
NOTE: If the argument has previously been seen, it will result in a
[ArgumentConflict
][crate::error::ErrorKind::ArgumentConflict] unless
Command::args_override_self(true)
is set.
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("flag")
.long("flag")
.action(clap::ArgAction::Set)
);
let matches = cmd.try_get_matches_from(["mycmd", "--flag", "value"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_many::<String>("flag").unwrap_or_default().map(|v| v.as_str()).collect::<Vec<_>>(),
vec!["value"]
);
Append
When encountered, store the associated value(s) in ArgMatches
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("flag")
.long("flag")
.action(clap::ArgAction::Append)
);
let matches = cmd.try_get_matches_from(["mycmd", "--flag", "value1", "--flag", "value2"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_many::<String>("flag").unwrap_or_default().map(|v| v.as_str()).collect::<Vec<_>>(),
vec!["value1", "value2"]
);
SetTrue
When encountered, act as if "true"
was encountered on the command-line
If no default_value
is set, it will be false
.
No value is allowed. To optionally accept a value, see
Arg::default_missing_value
NOTE: If the argument has previously been seen, it will result in a
[ArgumentConflict
][crate::error::ErrorKind::ArgumentConflict] unless
Command::args_override_self(true)
is set.
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("flag")
.long("flag")
.action(clap::ArgAction::SetTrue)
);
let matches = cmd.clone().try_get_matches_from(["mycmd", "--flag"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_flag("flag"),
true
);
let matches = cmd.try_get_matches_from(["mycmd"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_flag("flag"),
false
);
You can use [TypedValueParser::map
][crate::builder::TypedValueParser::map] to have the
flag control an application-specific type:
let cmd = Command::new("mycmd")
.arg(
Arg::new("flag")
.long("flag")
.action(clap::ArgAction::SetTrue)
.value_parser(
BoolishValueParser::new()
.map(|b| -> usize {
if b { 10 } else { 5 }
})
)
);
let matches = cmd.clone().try_get_matches_from(["mycmd", "--flag"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_one::<usize>("flag").copied(),
Some(10)
);
let matches = cmd.try_get_matches_from(["mycmd"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_one::<usize>("flag").copied(),
Some(5)
);
SetFalse
When encountered, act as if "false"
was encountered on the command-line
If no default_value
is set, it will be true
.
No value is allowed. To optionally accept a value, see
Arg::default_missing_value
NOTE: If the argument has previously been seen, it will result in a
[ArgumentConflict
][crate::error::ErrorKind::ArgumentConflict] unless
Command::args_override_self(true)
is set.
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("flag")
.long("flag")
.action(clap::ArgAction::SetFalse)
);
let matches = cmd.clone().try_get_matches_from(["mycmd", "--flag"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_flag("flag"),
false
);
let matches = cmd.try_get_matches_from(["mycmd"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_flag("flag"),
true
);
Count
When encountered, increment a u8
counter starting from 0
.
If no default_value
is set, it will be 0
.
No value is allowed. To optionally accept a value, see
Arg::default_missing_value
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("flag")
.long("flag")
.action(clap::ArgAction::Count)
);
let matches = cmd.clone().try_get_matches_from(["mycmd", "--flag", "--flag"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_count("flag"),
2
);
let matches = cmd.try_get_matches_from(["mycmd"]).unwrap();
assert!(matches.contains_id("flag"));
assert_eq!(
matches.get_count("flag"),
0
);
Help
When encountered, display Command::print_help
Depending on the flag, Command::print_long_help
may be shown
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("special-help")
.short('?')
.action(clap::ArgAction::Help)
);
// Existing help still exists
let err = cmd.clone().try_get_matches_from(["mycmd", "-h"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
// New help available
let err = cmd.try_get_matches_from(["mycmd", "-?"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
HelpShort
When encountered, display Command::print_help
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("special-help")
.short('?')
.action(clap::ArgAction::HelpShort)
);
// Existing help still exists
let err = cmd.clone().try_get_matches_from(["mycmd", "-h"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
// New help available
let err = cmd.try_get_matches_from(["mycmd", "-?"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
HelpLong
When encountered, display Command::print_long_help
§Examples
let cmd = Command::new("mycmd")
.arg(
Arg::new("special-help")
.short('?')
.action(clap::ArgAction::HelpLong)
);
// Existing help still exists
let err = cmd.clone().try_get_matches_from(["mycmd", "-h"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
// New help available
let err = cmd.try_get_matches_from(["mycmd", "-?"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayHelp);
Version
When encountered, display Command::version
Depending on the flag, Command::long_version
may be shown
§Examples
let cmd = Command::new("mycmd")
.version("1.0.0")
.arg(
Arg::new("special-version")
.long("special-version")
.action(clap::ArgAction::Version)
);
// Existing help still exists
let err = cmd.clone().try_get_matches_from(["mycmd", "--version"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayVersion);
// New help available
let err = cmd.try_get_matches_from(["mycmd", "--special-version"]).unwrap_err();
assert_eq!(err.kind(), clap::error::ErrorKind::DisplayVersion);
Implementations§
§impl ArgAction
impl ArgAction
pub fn takes_values(&self) -> bool
pub fn takes_values(&self) -> bool
Returns whether this action accepts values on the command-line
default_values
and [env
][super::Arg::env] may still be
processed.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ArgAction
impl RefUnwindSafe for ArgAction
impl Send for ArgAction
impl Sync for ArgAction
impl Unpin for ArgAction
impl UnwindSafe for ArgAction
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte
Size for each variant:
Set
: 0 bytesAppend
: 0 bytesSetTrue
: 0 bytesSetFalse
: 0 bytesCount
: 0 bytesHelp
: 0 bytesHelpShort
: 0 bytesHelpLong
: 0 bytesVersion
: 0 bytes