From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../rust/clap_builder/src/builder/arg_settings.rs | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 third_party/rust/clap_builder/src/builder/arg_settings.rs (limited to 'third_party/rust/clap_builder/src/builder/arg_settings.rs') diff --git a/third_party/rust/clap_builder/src/builder/arg_settings.rs b/third_party/rust/clap_builder/src/builder/arg_settings.rs new file mode 100644 index 0000000000..fd47504047 --- /dev/null +++ b/third_party/rust/clap_builder/src/builder/arg_settings.rs @@ -0,0 +1,91 @@ +#[allow(unused)] +use crate::Arg; + +#[derive(Default, Copy, Clone, Debug, PartialEq, Eq)] +pub(crate) struct ArgFlags(u32); + +impl ArgFlags { + pub(crate) fn set(&mut self, setting: ArgSettings) { + self.0 |= setting.bit(); + } + + pub(crate) fn unset(&mut self, setting: ArgSettings) { + self.0 &= !setting.bit(); + } + + pub(crate) fn is_set(&self, setting: ArgSettings) -> bool { + self.0 & setting.bit() != 0 + } + + pub(crate) fn insert(&mut self, other: Self) { + self.0 |= other.0; + } +} + +impl std::ops::BitOr for ArgFlags { + type Output = Self; + + fn bitor(mut self, rhs: Self) -> Self::Output { + self.insert(rhs); + self + } +} + +/// Various settings that apply to arguments and may be set, unset, and checked via getter/setter +/// methods [`Arg::setting`], [`Arg::unset_setting`], and [`Arg::is_set`]. This is what the +/// [`Arg`] methods which accept a `bool` use internally. +/// +/// [`Arg`]: crate::Arg +/// [`Arg::setting`]: crate::Arg::setting() +/// [`Arg::unset_setting`]: crate::Arg::unset_setting() +/// [`Arg::is_set`]: crate::Arg::is_set() +#[derive(Debug, PartialEq, Copy, Clone)] +#[repr(u8)] +pub(crate) enum ArgSettings { + Required, + Global, + Hidden, + NextLineHelp, + HidePossibleValues, + AllowHyphenValues, + AllowNegativeNumbers, + RequireEquals, + Last, + TrailingVarArg, + HideDefaultValue, + IgnoreCase, + #[cfg(feature = "env")] + HideEnv, + #[cfg(feature = "env")] + HideEnvValues, + HiddenShortHelp, + HiddenLongHelp, + Exclusive, +} + +impl ArgSettings { + fn bit(self) -> u32 { + 1 << (self as u8) + } +} + +#[cfg(test)] +mod test { + use super::*; + use crate::Arg; + + #[test] + fn setting() { + let m = Arg::new("setting").setting(ArgSettings::Required); + assert!(m.is_required_set()); + } + + #[test] + fn unset_setting() { + let m = Arg::new("unset_setting").setting(ArgSettings::Required); + assert!(m.is_required_set()); + + let m = m.unset_setting(ArgSettings::Required); + assert!(!m.is_required_set(), "{m:#?}"); + } +} -- cgit v1.2.3