#[derive(Clone, Debug)]
#[non_exhaustive]
#[allow(missing_copy_implementations)] pub enum ArgAction {
Set,
Append,
#[cfg_attr(
feature = "deprecated",
deprecated(
since = "3.2.0",
note = "Replaced with `ArgAction::Set` or `ArgAction::Append`"
)
)]
StoreValue,
#[cfg_attr(
feature = "deprecated",
deprecated(
since = "3.2.0",
note = "Replaced with `ArgAction::SetTrue` or `ArgAction::Count`"
)
)]
IncOccurrence,
SetTrue,
SetFalse,
Count,
Help,
Version,
}
impl ArgAction {
pub fn takes_values(&self) -> bool {
match self {
Self::Set => true,
Self::Append => true,
#[allow(deprecated)]
Self::StoreValue => true,
#[allow(deprecated)]
Self::IncOccurrence => false,
Self::SetTrue => false,
Self::SetFalse => false,
Self::Count => false,
Self::Help => false,
Self::Version => false,
}
}
pub(crate) fn default_value(&self) -> Option<&'static std::ffi::OsStr> {
match self {
Self::Set => None,
Self::Append => None,
#[allow(deprecated)]
Self::StoreValue => None,
#[allow(deprecated)]
Self::IncOccurrence => None,
Self::SetTrue => Some(std::ffi::OsStr::new("false")),
Self::SetFalse => Some(std::ffi::OsStr::new("true")),
Self::Count => Some(std::ffi::OsStr::new("0")),
Self::Help => None,
Self::Version => None,
}
}
pub(crate) fn default_value_parser(&self) -> Option<super::ValueParser> {
match self {
Self::Set => None,
Self::Append => None,
#[allow(deprecated)]
Self::StoreValue => None,
#[allow(deprecated)]
Self::IncOccurrence => None,
Self::SetTrue => Some(super::ValueParser::bool()),
Self::SetFalse => Some(super::ValueParser::bool()),
Self::Count => Some(crate::value_parser!(u8).into()),
Self::Help => None,
Self::Version => None,
}
}
#[cfg(debug_assertions)]
pub(crate) fn value_type_id(&self) -> Option<crate::parser::AnyValueId> {
use crate::parser::AnyValueId;
match self {
Self::Set => None,
Self::Append => None,
#[allow(deprecated)]
Self::StoreValue => None,
#[allow(deprecated)]
Self::IncOccurrence => None,
Self::SetTrue => Some(AnyValueId::of::<bool>()),
Self::SetFalse => Some(AnyValueId::of::<bool>()),
Self::Count => Some(AnyValueId::of::<CountType>()),
Self::Help => None,
Self::Version => None,
}
}
}
pub(crate) type CountType = u8;