1 #[allow(unused)] 2 use crate::Arg; 3 #[allow(unused)] 4 use crate::Command; 5 6 #[derive(Default, Copy, Clone, Debug, PartialEq, Eq)] 7 pub(crate) struct AppFlags(u32); 8 9 impl AppFlags { set(&mut self, setting: AppSettings)10 pub(crate) fn set(&mut self, setting: AppSettings) { 11 self.0 |= setting.bit(); 12 } 13 unset(&mut self, setting: AppSettings)14 pub(crate) fn unset(&mut self, setting: AppSettings) { 15 self.0 &= !setting.bit(); 16 } 17 is_set(&self, setting: AppSettings) -> bool18 pub(crate) fn is_set(&self, setting: AppSettings) -> bool { 19 self.0 & setting.bit() != 0 20 } 21 insert(&mut self, other: Self)22 pub(crate) fn insert(&mut self, other: Self) { 23 self.0 |= other.0; 24 } 25 } 26 27 impl std::ops::BitOr for AppFlags { 28 type Output = Self; 29 bitor(mut self, rhs: Self) -> Self::Output30 fn bitor(mut self, rhs: Self) -> Self::Output { 31 self.insert(rhs); 32 self 33 } 34 } 35 36 /// Application level settings, which affect how [`Command`] operates 37 /// 38 /// **NOTE:** When these settings are used, they apply only to current command, and are *not* 39 /// propagated down or up through child or parent subcommands 40 /// 41 /// [`Command`]: crate::Command 42 #[derive(Debug, PartialEq, Copy, Clone)] 43 #[repr(u8)] 44 pub(crate) enum AppSettings { 45 IgnoreErrors, 46 AllowHyphenValues, 47 AllowNegativeNumbers, 48 AllArgsOverrideSelf, 49 AllowMissingPositional, 50 TrailingVarArg, 51 DontDelimitTrailingValues, 52 InferLongArgs, 53 InferSubcommands, 54 SubcommandRequired, 55 AllowExternalSubcommands, 56 Multicall, 57 SubcommandsNegateReqs, 58 ArgsNegateSubcommands, 59 SubcommandPrecedenceOverArg, 60 FlattenHelp, 61 ArgRequiredElseHelp, 62 NextLineHelp, 63 DisableColoredHelp, 64 DisableHelpFlag, 65 DisableHelpSubcommand, 66 DisableVersionFlag, 67 PropagateVersion, 68 Hidden, 69 HidePossibleValues, 70 HelpExpected, 71 NoBinaryName, 72 #[allow(dead_code)] 73 ColorAuto, 74 ColorAlways, 75 ColorNever, 76 Built, 77 BinNameBuilt, 78 } 79 80 impl AppSettings { bit(self) -> u3281 fn bit(self) -> u32 { 82 1 << (self as u8) 83 } 84 } 85