| // Std |
| use std::ops::BitOr; |
| |
| #[allow(unused)] |
| use crate::Arg; |
| #[allow(unused)] |
| use crate::Command; |
| |
| // Third party |
| use bitflags::bitflags; |
| |
| #[doc(hidden)] |
| #[derive(Debug, Copy, Clone, PartialEq, Eq)] |
| pub(crate) struct AppFlags(Flags); |
| |
| impl Default for AppFlags { |
| fn default() -> Self { |
| AppFlags(Flags::COLOR_AUTO) |
| } |
| } |
| |
| /// Application level settings, which affect how [`Command`] operates |
| /// |
| /// **NOTE:** When these settings are used, they apply only to current command, and are *not* |
| /// propagated down or up through child or parent subcommands |
| /// |
| /// [`Command`]: crate::Command |
| #[derive(Debug, PartialEq, Copy, Clone)] |
| #[non_exhaustive] |
| pub(crate) enum AppSettings { |
| IgnoreErrors, |
| AllowHyphenValues, |
| AllowNegativeNumbers, |
| AllArgsOverrideSelf, |
| AllowMissingPositional, |
| TrailingVarArg, |
| DontDelimitTrailingValues, |
| InferLongArgs, |
| InferSubcommands, |
| SubcommandRequired, |
| AllowExternalSubcommands, |
| Multicall, |
| SubcommandsNegateReqs, |
| ArgsNegateSubcommands, |
| SubcommandPrecedenceOverArg, |
| ArgRequiredElseHelp, |
| NextLineHelp, |
| DisableColoredHelp, |
| DisableHelpFlag, |
| DisableHelpSubcommand, |
| DisableVersionFlag, |
| PropagateVersion, |
| Hidden, |
| HidePossibleValues, |
| HelpExpected, |
| NoBinaryName, |
| #[allow(dead_code)] |
| ColorAuto, |
| ColorAlways, |
| ColorNever, |
| Built, |
| BinNameBuilt, |
| } |
| |
| bitflags! { |
| struct Flags: u64 { |
| const SC_NEGATE_REQS = 1; |
| const SC_REQUIRED = 1 << 1; |
| const ARG_REQUIRED_ELSE_HELP = 1 << 2; |
| const PROPAGATE_VERSION = 1 << 3; |
| const DISABLE_VERSION_FOR_SC = 1 << 4; |
| const WAIT_ON_ERROR = 1 << 6; |
| const DISABLE_VERSION_FLAG = 1 << 10; |
| const HIDDEN = 1 << 11; |
| const TRAILING_VARARG = 1 << 12; |
| const NO_BIN_NAME = 1 << 13; |
| const ALLOW_UNK_SC = 1 << 14; |
| const LEADING_HYPHEN = 1 << 16; |
| const NO_POS_VALUES = 1 << 17; |
| const NEXT_LINE_HELP = 1 << 18; |
| const DISABLE_COLORED_HELP = 1 << 20; |
| const COLOR_ALWAYS = 1 << 21; |
| const COLOR_AUTO = 1 << 22; |
| const COLOR_NEVER = 1 << 23; |
| const DONT_DELIM_TRAIL = 1 << 24; |
| const ALLOW_NEG_NUMS = 1 << 25; |
| const DISABLE_HELP_SC = 1 << 27; |
| const ARGS_NEGATE_SCS = 1 << 29; |
| const PROPAGATE_VALS_DOWN = 1 << 30; |
| const ALLOW_MISSING_POS = 1 << 31; |
| const TRAILING_VALUES = 1 << 32; |
| const BUILT = 1 << 33; |
| const BIN_NAME_BUILT = 1 << 34; |
| const VALID_ARG_FOUND = 1 << 35; |
| const INFER_SUBCOMMANDS = 1 << 36; |
| const CONTAINS_LAST = 1 << 37; |
| const ARGS_OVERRIDE_SELF = 1 << 38; |
| const HELP_REQUIRED = 1 << 39; |
| const SUBCOMMAND_PRECEDENCE_OVER_ARG = 1 << 40; |
| const DISABLE_HELP_FLAG = 1 << 41; |
| const INFER_LONG_ARGS = 1 << 43; |
| const IGNORE_ERRORS = 1 << 44; |
| const MULTICALL = 1 << 45; |
| const EXPAND_HELP_SUBCOMMAND_TREES = 1 << 46; |
| const NO_OP = 0; |
| } |
| } |
| |
| impl_settings! { AppSettings, AppFlags, |
| ArgRequiredElseHelp |
| => Flags::ARG_REQUIRED_ELSE_HELP, |
| SubcommandPrecedenceOverArg |
| => Flags::SUBCOMMAND_PRECEDENCE_OVER_ARG, |
| ArgsNegateSubcommands |
| => Flags::ARGS_NEGATE_SCS, |
| AllowExternalSubcommands |
| => Flags::ALLOW_UNK_SC, |
| AllowHyphenValues |
| => Flags::LEADING_HYPHEN, |
| AllowNegativeNumbers |
| => Flags::ALLOW_NEG_NUMS, |
| AllowMissingPositional |
| => Flags::ALLOW_MISSING_POS, |
| ColorAlways |
| => Flags::COLOR_ALWAYS, |
| ColorAuto |
| => Flags::COLOR_AUTO, |
| ColorNever |
| => Flags::COLOR_NEVER, |
| DontDelimitTrailingValues |
| => Flags::DONT_DELIM_TRAIL, |
| DisableColoredHelp |
| => Flags::DISABLE_COLORED_HELP, |
| DisableHelpSubcommand |
| => Flags::DISABLE_HELP_SC, |
| DisableHelpFlag |
| => Flags::DISABLE_HELP_FLAG, |
| DisableVersionFlag |
| => Flags::DISABLE_VERSION_FLAG, |
| PropagateVersion |
| => Flags::PROPAGATE_VERSION, |
| HidePossibleValues |
| => Flags::NO_POS_VALUES, |
| HelpExpected |
| => Flags::HELP_REQUIRED, |
| Hidden |
| => Flags::HIDDEN, |
| Multicall |
| => Flags::MULTICALL, |
| NoBinaryName |
| => Flags::NO_BIN_NAME, |
| SubcommandsNegateReqs |
| => Flags::SC_NEGATE_REQS, |
| SubcommandRequired |
| => Flags::SC_REQUIRED, |
| TrailingVarArg |
| => Flags::TRAILING_VARARG, |
| NextLineHelp |
| => Flags::NEXT_LINE_HELP, |
| IgnoreErrors |
| => Flags::IGNORE_ERRORS, |
| Built |
| => Flags::BUILT, |
| BinNameBuilt |
| => Flags::BIN_NAME_BUILT, |
| InferSubcommands |
| => Flags::INFER_SUBCOMMANDS, |
| AllArgsOverrideSelf |
| => Flags::ARGS_OVERRIDE_SELF, |
| InferLongArgs |
| => Flags::INFER_LONG_ARGS |
| } |