1 #![allow(deprecated)] 2 3 // Std 4 use std::ops::BitOr; 5 #[cfg(feature = "yaml")] 6 use std::str::FromStr; 7 8 // Third party 9 use bitflags::bitflags; 10 11 #[allow(unused)] 12 use crate::Arg; 13 14 #[doc(hidden)] 15 #[derive(Debug, Clone, Copy, PartialEq, Eq)] 16 pub struct ArgFlags(Flags); 17 18 impl Default for ArgFlags { default() -> Self19 fn default() -> Self { 20 Self::empty() 21 } 22 } 23 24 /// Various settings that apply to arguments and may be set, unset, and checked via getter/setter 25 /// methods [`Arg::setting`], [`Arg::unset_setting`], and [`Arg::is_set`]. This is what the 26 /// [`Arg`] methods which accept a `bool` use internally. 27 /// 28 /// [`Arg`]: crate::Arg 29 /// [`Arg::setting`]: crate::Arg::setting() 30 /// [`Arg::unset_setting`]: crate::Arg::unset_setting() 31 /// [`Arg::is_set`]: crate::Arg::is_set() 32 #[derive(Debug, PartialEq, Copy, Clone)] 33 #[non_exhaustive] 34 pub enum ArgSettings { 35 /// Deprecated, replaced with [`Arg::required`] and [`Arg::is_required_set`] 36 /// 37 /// Derive: replace `#[clap(setting = Required)]` with `#[clap(required = true)]` 38 /// 39 /// Builder: replace `arg.setting(Required)` with `arg.required(true)` 40 #[cfg_attr( 41 feature = "deprecated", 42 deprecated( 43 since = "3.1.0", 44 note = "Replaced with `Arg::required` and `Arg::is_required_set` 45 46 Derive: replace `#[clap(setting = Required)]` with `#[clap(required = true)]` 47 48 Builder: replace `arg.setting(Required)` with `arg.required(true)` 49 " 50 ) 51 )] 52 Required, 53 /// Deprecated, replaced with [`Arg::multiple_values`] and [`Arg::is_multiple_values_set`] 54 /// 55 /// Derive: replace `#[clap(setting = MultipleValues)]` with `#[clap(multiple_values = true)]` 56 /// 57 /// Builder: replace `arg.setting(MultipleValues)` with `arg.multiple_values(true)` 58 #[cfg_attr( 59 feature = "deprecated", 60 deprecated( 61 since = "3.1.0", 62 note = "Replaced with `Arg::multiple_values` and `Arg::`is_multiple_values_set` 63 64 Derive: replace `#[clap(setting = MultipleValues)]` with `#[clap(multiple_values = true)]` 65 66 Builder: replace `arg.setting(MultipleValues)` with `arg.multiple_values(true)` 67 " 68 ) 69 )] 70 MultipleValues, 71 /// Deprecated, replaced with [`Arg::action`] ([Issue #3772](https://github.com/clap-rs/clap/issues/3772)) 72 #[cfg_attr( 73 feature = "deprecated", 74 deprecated( 75 since = "3.1.0", 76 note = "Replaced with `Arg::action` (Issue #3772) 77 78 Builder: replace `arg.setting(MultipleOccurrences)` with `arg.action(ArgAction::Append)` when taking a value and `arg.action(ArgAction::Count)` with `matches.get_count` when not 79 " 80 ) 81 )] 82 MultipleOccurrences, 83 /// Deprecated, see [`ArgSettings::MultipleOccurrences`] (most likely what you want) and 84 /// [`ArgSettings::MultipleValues`] 85 /// 86 /// Derive: replace `#[clap(setting = Multiple)]` with `#[clap(multiple_values = true, multiple_occurrences = true)]` 87 /// 88 /// Builder: replace `arg.setting(Multiple)` with `arg.multiple_values(true).multiple_occurrences(true)` 89 #[cfg_attr( 90 feature = "deprecated", 91 deprecated( 92 since = "3.0.0", 93 note = "Split into `Arg::multiple_occurrences` (most likely what you want) and `Arg::multiple_values` 94 95 Derive: replace `#[clap(setting = Multiple)]` with `#[clap(multiple_values = true, multiple_occurrences = true)]` 96 97 Builder: replace `arg.setting(Multiple)` with `arg.multiple_values(true).multiple_occurrences(true)` 98 " 99 ) 100 )] 101 #[doc(hidden)] 102 Multiple, 103 /// Deprecated, replaced with [`Arg::value_parser(NonEmptyStringValueParser::new())`] 104 /// 105 /// Derive: replace `#[clap(setting = ForbidEmptyValues)]` with `#[clap(value_parser = NonEmptyStringValueParser::new())]` 106 /// 107 /// Builder: replace `arg.setting(Multiple)` with `arg.value_parser(NonEmptyStringValueParser::new())` 108 #[cfg_attr( 109 feature = "deprecated", 110 deprecated( 111 since = "3.1.0", 112 note = "Replaced with `Arg::value_parser(NonEmptyStringValueParser::new())` 113 114 Derive: replace `#[clap(setting = ForbidEmptyValues)]` with `#[clap(value_parser = NonEmptyStringValueParser::new())]` 115 116 Builder: replace `arg.setting(Multiple)` with `arg.value_parser(NonEmptyStringValueParser::new())` 117 " 118 ) 119 )] 120 ForbidEmptyValues, 121 /// Deprecated, replaced with [`Arg::global`] and [`Arg::is_global_set`] 122 /// 123 /// Derive: replace `#[clap(setting = Global)]` with `#[clap(global = true)]` 124 /// 125 /// Builder: replace `arg.setting(Global)` with `arg.global(true)` 126 #[cfg_attr( 127 feature = "deprecated", 128 deprecated( 129 since = "3.1.0", 130 note = "Replaced with `Arg::global` and `Arg::is_global_set` 131 132 Derive: replace `#[clap(setting = Global)]` with `#[clap(global = true)]` 133 134 Builder: replace `arg.setting(Global)` with `arg.global(true)` 135 " 136 ) 137 )] 138 Global, 139 /// Deprecated, replaced with [`Arg::hide`] and [`Arg::is_hide_set`] 140 /// 141 /// Derive: replace `#[clap(setting = Hidden)]` with `#[clap(hide = true)]` 142 /// 143 /// Builder: replace `arg.setting(Hidden)` with `arg.hide(true)` 144 #[cfg_attr( 145 feature = "deprecated", 146 deprecated( 147 since = "3.1.0", 148 note = "Replaced with `Arg::hide` and `Arg::is_hide_set` 149 150 Derive: replace `#[clap(setting = Hidden)]` with `#[clap(hide = true)]` 151 152 Builder: replace `arg.setting(Hidden)` with `arg.hide(true)` 153 " 154 ) 155 )] 156 Hidden, 157 /// Deprecated, replaced with [`Arg::takes_value`] and [`Arg::is_takes_value_set`] 158 /// 159 /// Derive: this setting shouldn't be needed 160 /// 161 /// Builder: replace `arg.setting(TakesValue)` with `arg.takes_value(true)` 162 #[cfg_attr( 163 feature = "deprecated", 164 deprecated( 165 since = "3.1.0", 166 note = "Replaced with `Arg::takes_value` and `Arg::is_takes_value_set` 167 168 Derive: this setting shouldn't be needed 169 170 Builder: replace `arg.setting(TakesValue)` with `arg.takes_value(true)` 171 " 172 ) 173 )] 174 TakesValue, 175 /// Deprecated, replaced with [`Arg::use_value_delimiter`] and 176 /// [`Arg::is_use_value_delimiter_set`] 177 /// 178 /// Derive: replace `#[clap(setting = UseValueDelimiter)]` with `#[clap(use_value_delimiter = true)]` 179 /// 180 /// Builder: replace `arg.setting(UseValueDelimiter)` with `arg.use_value_delimiter(true)` 181 #[cfg_attr( 182 feature = "deprecated", 183 deprecated( 184 since = "3.1.0", 185 note = "Replaced with `Arg::use_value_delimiter` and `Arg::is_use_value_delimiter_set` 186 187 Derive: replace `#[clap(setting = UseValueDelimiter)]` with `#[clap(use_value_delimiter = true)]` 188 189 Builder: replace `arg.setting(UseValueDelimiter)` with `arg.use_value_delimiter(true)` 190 " 191 ) 192 )] 193 UseValueDelimiter, 194 /// Deprecated, replaced with [`Arg::next_line_help`] and [`Arg::is_next_line_help_set`] 195 /// 196 /// Derive: replace `#[clap(setting = NextLineHelp)]` with `#[clap(next_line_help = true)]` 197 /// 198 /// Builder: replace `arg.setting(NextLineHelp)` with `arg.next_line_help(true)` 199 #[cfg_attr( 200 feature = "deprecated", 201 deprecated( 202 since = "3.1.0", 203 note = "Replaced with `Arg::next_line_help` and `Arg::is_next_line_help_set` 204 205 Derive: replace `#[clap(setting = NextLineHelp)]` with `#[clap(next_line_help = true)]` 206 207 Builder: replace `arg.setting(NextLineHelp)` with `arg.next_line_help(true)` 208 " 209 ) 210 )] 211 NextLineHelp, 212 /// Deprecated, replaced with [`Arg::require_value_delimiter`] and 213 /// [`Arg::is_require_value_delimiter_set`] 214 /// 215 /// Derive: replace `#[clap(setting = RequireDelimiter)]` with `#[clap(require_value_delimiter = true)]` 216 /// 217 /// Builder: replace `arg.setting(RequireDelimiter)` with `arg.require_value_delimiter(true)` 218 #[cfg_attr( 219 feature = "deprecated", 220 deprecated( 221 since = "3.1.0", 222 note = "Replaced with `Arg::require_value_delimiter` and `Arg::is_require_value_delimiter_set` 223 224 Derive: replace `#[clap(setting = RequireDelimiter)]` with `#[clap(require_value_delimiter = true)]` 225 226 Builder: replace `arg.setting(RequireDelimiter)` with `arg.require_value_delimiter(true)` 227 " 228 ) 229 )] 230 RequireDelimiter, 231 /// Deprecated, replaced with [`Arg::hide_possible_values`] and 232 /// [`Arg::is_hide_possible_values_set`] 233 /// 234 /// Derive: replace `#[clap(setting = HidePossibleValues)]` with `#[clap(hide_possible_values = true)]` 235 /// 236 /// Builder: replace `arg.setting(HidePossibleValues)` with `arg.hide_possible_values(true)` 237 #[cfg_attr( 238 feature = "deprecated", 239 deprecated( 240 since = "3.1.0", 241 note = "Replaced with `Arg::hide_possible_values` and `Arg::is_hide_possible_values_set` 242 243 Derive: replace `#[clap(setting = HidePossibleValues)]` with `#[clap(hide_possible_values = true)]` 244 245 Builder: replace `arg.setting(HidePossibleValues)` with `arg.hide_possible_values(true)` 246 " 247 ) 248 )] 249 HidePossibleValues, 250 /// Deprecated, replaced with [`Arg::allow_hyphen_values`] and 251 /// [`Arg::is_allow_hyphen_values_set`] 252 /// 253 /// Derive: replace `#[clap(setting = AllowHyphenValues)]` with `#[clap(allow_hyphen_values = true)]` 254 /// 255 /// Builder: replace `arg.setting(AllowHyphenValues)` with `arg.allow_hyphen_values(true)` 256 #[cfg_attr( 257 feature = "deprecated", 258 deprecated( 259 since = "3.1.0", 260 note = "Replaced with `Arg::allow_hyphen_values` and `Arg::is_allow_hyphen_values_set` 261 262 Derive: replace `#[clap(setting = AllowHyphenValues)]` with `#[clap(allow_hyphen_values = true)]` 263 264 Builder: replace `arg.setting(AllowHyphenValues)` with `arg.allow_hyphen_values(true)` 265 " 266 ) 267 )] 268 AllowHyphenValues, 269 /// Deprecated, replaced with [`Arg::allow_hyphen_values`] and 270 /// [`Arg::is_allow_hyphen_values_set`] 271 /// 272 /// Derive: replace `#[clap(setting = AllowLeadingHyphen)]` with `#[clap(allow_hyphen_values = true)]` 273 /// 274 /// Builder: replace `arg.setting(AllowLeadingHyphen)` with `arg.allow_hyphen_values(true)` 275 #[cfg_attr( 276 feature = "deprecated", 277 deprecated( 278 since = "3.0.0", 279 note = "Replaced with `Arg::allow_hyphen_values` and `Arg::is_allow_hyphen_values_set` 280 281 Derive: replace `#[clap(setting = AllowLeadingHyphen)]` with `#[clap(allow_hyphen_values = true)]` 282 283 Builder: replace `arg.setting(AllowLeadingHyphen)` with `arg.allow_hyphen_values(true)` 284 " 285 ) 286 )] 287 #[doc(hidden)] 288 AllowLeadingHyphen, 289 /// Deprecated, replaced with [`Arg::require_equals`] and [`Arg::is_require_equals_set`] 290 /// 291 /// Derive: replace `#[clap(setting = RequireEquals)]` with `#[clap(require_equals = true)]` 292 /// 293 /// Builder: replace `arg.setting(RequireEquals)` with `arg.require_equals(true)` 294 #[cfg_attr( 295 feature = "deprecated", 296 deprecated( 297 since = "3.1.0", 298 note = "Replaced with `Arg::require_equals` and `Arg::is_require_equals_set` 299 300 Derive: replace `#[clap(setting = RequireEquals)]` with `#[clap(require_equals = true)]` 301 302 Builder: replace `arg.setting(RequireEquals)` with `arg.require_equals(true)` 303 " 304 ) 305 )] 306 RequireEquals, 307 /// Deprecated, replaced with [`Arg::last`] and [`Arg::is_last_set`] 308 /// 309 /// Derive: replace `#[clap(setting = Last)]` with `#[clap(last = true)]` 310 /// 311 /// Builder: replace `arg.setting(Last)` with `arg.last(true)` 312 #[cfg_attr( 313 feature = "deprecated", 314 deprecated( 315 since = "3.1.0", 316 note = "Replaced with `Arg::last` and `Arg::is_last_set` 317 318 Derive: replace `#[clap(setting = Last)]` with `#[clap(last = true)]` 319 320 Builder: replace `arg.setting(Last)` with `arg.last(true)` 321 " 322 ) 323 )] 324 Last, 325 /// Deprecated, replaced with [`Arg::hide_default_value`] and [`Arg::is_hide_default_value_set`] 326 /// 327 /// Derive: replace `#[clap(setting = HideDefaultValue)]` with `#[clap(hide_default_value = true)]` 328 /// 329 /// Builder: replace `arg.setting(HideDefaultValue)` with `arg.hide_default_value(true)` 330 #[cfg_attr( 331 feature = "deprecated", 332 deprecated( 333 since = "3.1.0", 334 note = "Replaced with `Arg::hide_default_value` and `Arg::is_hide_default_value_set` 335 336 Derive: replace `#[clap(setting = HideDefaultValue)]` with `#[clap(hide_default_value = true)]` 337 338 Builder: replace `arg.setting(HideDefaultValue)` with `arg.hide_default_value(true)` 339 " 340 ) 341 )] 342 HideDefaultValue, 343 /// Deprecated, replaced with [`Arg::ignore_case`] and [`Arg::is_ignore_case_set`] 344 /// 345 /// Derive: replace `#[clap(setting = IgnoreCase)]` with `#[clap(ignore_case = true)]` 346 /// 347 /// Builder: replace `arg.setting(IgnoreCase)` with `arg.ignore_case(true)` 348 #[cfg_attr( 349 feature = "deprecated", 350 deprecated( 351 since = "3.1.0", 352 note = "Replaced with `Arg::ignore_case` and `Arg::is_ignore_case_set` 353 354 Derive: replace `#[clap(setting = IgnoreCase)]` with `#[clap(ignore_case = true)]` 355 356 Builder: replace `arg.setting(IgnoreCase)` with `arg.ignore_case(true)` 357 " 358 ) 359 )] 360 IgnoreCase, 361 /// Deprecated, replaced with [`Arg::ignore_case`] and [`Arg::is_ignore_case_set`] 362 /// 363 /// Derive: replace `#[clap(setting = CaseInsensitive)]` with `#[clap(ignore_case = true)]` 364 /// 365 /// Builder: replace `arg.setting(CaseInsensitive)` with `arg.ignore_case(true)` 366 #[cfg_attr( 367 feature = "deprecated", 368 deprecated( 369 since = "3.0.0", 370 note = "Replaced with `Arg::ignore_case` and `Arg::is_ignore_case_set` 371 372 Derive: replace `#[clap(setting = CaseInsensitive)]` with `#[clap(ignore_case = true)]` 373 374 Builder: replace `arg.setting(CaseInsensitive)` with `arg.ignore_case(true)` 375 " 376 ) 377 )] 378 #[doc(hidden)] 379 CaseInsensitive, 380 /// Deprecated, replaced with [`Arg::hide_env`] and [`Arg::is_hide_env_set`] 381 /// 382 /// Derive: replace `#[clap(setting = HideEnv)]` with `#[clap(hide_env = true)]` 383 /// 384 /// Builder: replace `arg.setting(HideEnv)` with `arg.hide_env(true)` 385 #[cfg_attr( 386 feature = "deprecated", 387 deprecated( 388 since = "3.1.0", 389 note = "Replaced with `Arg::hide_env` and `Arg::is_hide_env_set` 390 391 Derive: replace `#[clap(setting = HideEnv)]` with `#[clap(hide_env = true)]` 392 393 Builder: replace `arg.setting(HideEnv)` with `arg.hide_env(true)` 394 " 395 ) 396 )] 397 #[cfg(feature = "env")] 398 HideEnv, 399 /// Deprecated, replaced with [`Arg::hide_env_values`] and [`Arg::is_hide_env_values_set`] 400 /// 401 /// Derive: replace `#[clap(setting = HideEnvValues)]` with `#[clap(hide_env_values = true)]` 402 /// 403 /// Builder: replace `arg.setting(HideEnvValues)` with `arg.hide_env_values(true)` 404 #[cfg_attr( 405 feature = "deprecated", 406 deprecated( 407 since = "3.1.0", 408 note = "Replaced with `Arg::hide_env_values` and `Arg::is_hide_env_values_set` 409 410 Derive: replace `#[clap(setting = HideEnvValues)]` with `#[clap(hide_env_values = true)]` 411 412 Builder: replace `arg.setting(HideEnvValues)` with `arg.hide_env_values(true)` 413 " 414 ) 415 )] 416 #[cfg(feature = "env")] 417 HideEnvValues, 418 /// Deprecated, replaced with [`Arg::hide_short_help`] and [`Arg::is_hide_short_help_set`] 419 /// 420 /// Derive: replace `#[clap(setting = HiddenShortHelp)]` with `#[clap(hide_short_help = true)]` 421 /// 422 /// Builder: replace `arg.setting(HiddenShortHelp)` with `arg.hide_short_help(true)` 423 #[cfg_attr( 424 feature = "deprecated", 425 deprecated( 426 since = "3.1.0", 427 note = "Replaced with `Arg::hide_short_help` and `Arg::is_hide_short_help_set` 428 429 Derive: replace `#[clap(setting = HiddenShortHelp)]` with `#[clap(hide_short_help = true)]` 430 431 Builder: replace `arg.setting(HiddenShortHelp)` with `arg.hide_short_help(true)` 432 " 433 ) 434 )] 435 HiddenShortHelp, 436 /// Deprecated, replaced with [`Arg::hide_long_help`] and [`Arg::is_hide_long_help_set`] 437 /// 438 /// Derive: replace `#[clap(setting = HiddenLongHelp)]` with `#[clap(hide_long_help = true)]` 439 /// 440 /// Builder: replace `arg.setting(HiddenLongHelp)` with `arg.hide_long_help(true)` 441 #[cfg_attr( 442 feature = "deprecated", 443 deprecated( 444 since = "3.1.0", 445 note = "Replaced with `Arg::hide_long_help` and `Arg::is_hide_long_help_set` 446 447 Derive: replace `#[clap(setting = HiddenLongHelp)]` with `#[clap(hide_long_help = true)]` 448 449 Builder: replace `arg.setting(HiddenLongHelp)` with `arg.hide_long_help(true)` 450 " 451 ) 452 )] 453 HiddenLongHelp, 454 /// Deprecated, replaced with [`Arg::value_parser`] 455 /// 456 /// Derive: replace `#[clap(setting = AllowInvalidUtf8)]` with `#[clap(action)]` (which opts-in to the 457 /// new clap v4 behavior which gets the type via `value_parser!`) 458 /// 459 /// Builder: replace `arg.setting(AllowInvalidUtf8)` with `arg.value_parser(value_parser!(T))` where 460 /// `T` is the type of interest, like `OsString` or `PathBuf`, and `matches.value_of_os` with 461 /// `matches.get_one::<T>` or `matches.values_of_os` with `matches.get_many::<T>` 462 #[cfg_attr( 463 feature = "deprecated", 464 deprecated( 465 since = "3.1.0", 466 note = "Replaced with `value_parser` 467 468 Derive: replace `#[clap(setting = AllowInvalidUtf8)]` with `#[clap(action)]` (which opts-in to the 469 new clap v4 behavior which gets the type via `value_parser!`) 470 471 Builder: replace `arg.setting(AllowInvalidUtf8)` with `arg.value_parser(value_parser!(T))` where 472 `T` is the type of interest, like `OsString` or `PathBuf`, and `matches.value_of_os` with 473 `matches.get_one::<T>` or `matches.values_of_os` with `matches.get_many::<T>` 474 " 475 ) 476 )] 477 AllowInvalidUtf8, 478 /// Deprecated, replaced with [`Arg::exclusive`] and [`Arg::is_exclusive_set`] 479 /// 480 /// Derive: replace `#[clap(setting = Exclusive)]` with `#[clap(exclusive = true)]` 481 /// 482 /// Builder: replace `arg.setting(Exclusive)` with `arg.exclusive(true)` 483 #[cfg_attr( 484 feature = "deprecated", 485 deprecated( 486 since = "3.1.0", 487 note = "Replaced with `Arg::exclusive` and `Arg::is_exclusive_set` 488 489 Derive: replace `#[clap(setting = Exclusive)]` with `#[clap(exclusive = true)]` 490 491 Builder: replace `arg.setting(Exclusive)` with `arg.exclusive(true)` 492 " 493 ) 494 )] 495 Exclusive, 496 } 497 498 bitflags! { 499 struct Flags: u32 { 500 const REQUIRED = 1; 501 const MULTIPLE_OCC = 1 << 1; 502 const NO_EMPTY_VALS = 1 << 2; 503 const GLOBAL = 1 << 3; 504 const HIDDEN = 1 << 4; 505 const TAKES_VAL = 1 << 5; 506 const USE_DELIM = 1 << 6; 507 const NEXT_LINE_HELP = 1 << 7; 508 const REQ_DELIM = 1 << 9; 509 const DELIM_NOT_SET = 1 << 10; 510 const HIDE_POS_VALS = 1 << 11; 511 const ALLOW_TAC_VALS = 1 << 12; 512 const REQUIRE_EQUALS = 1 << 13; 513 const LAST = 1 << 14; 514 const HIDE_DEFAULT_VAL = 1 << 15; 515 const CASE_INSENSITIVE = 1 << 16; 516 #[cfg(feature = "env")] 517 const HIDE_ENV_VALS = 1 << 17; 518 const HIDDEN_SHORT_H = 1 << 18; 519 const HIDDEN_LONG_H = 1 << 19; 520 const MULTIPLE_VALS = 1 << 20; 521 const MULTIPLE = Self::MULTIPLE_OCC.bits | Self::MULTIPLE_VALS.bits; 522 #[cfg(feature = "env")] 523 const HIDE_ENV = 1 << 21; 524 const UTF8_NONE = 1 << 22; 525 const EXCLUSIVE = 1 << 23; 526 const NO_OP = 0; 527 } 528 } 529 530 impl_settings! { ArgSettings, ArgFlags, 531 Required => Flags::REQUIRED, 532 MultipleOccurrences => Flags::MULTIPLE_OCC, 533 MultipleValues => Flags::MULTIPLE_VALS, 534 Multiple => Flags::MULTIPLE, 535 ForbidEmptyValues => Flags::NO_EMPTY_VALS, 536 Global => Flags::GLOBAL, 537 Hidden => Flags::HIDDEN, 538 TakesValue => Flags::TAKES_VAL, 539 UseValueDelimiter => Flags::USE_DELIM, 540 NextLineHelp => Flags::NEXT_LINE_HELP, 541 RequireDelimiter => Flags::REQ_DELIM, 542 HidePossibleValues => Flags::HIDE_POS_VALS, 543 AllowHyphenValues => Flags::ALLOW_TAC_VALS, 544 AllowLeadingHyphen => Flags::ALLOW_TAC_VALS, 545 RequireEquals => Flags::REQUIRE_EQUALS, 546 Last => Flags::LAST, 547 IgnoreCase => Flags::CASE_INSENSITIVE, 548 CaseInsensitive => Flags::CASE_INSENSITIVE, 549 #[cfg(feature = "env")] 550 HideEnv => Flags::HIDE_ENV, 551 #[cfg(feature = "env")] 552 HideEnvValues => Flags::HIDE_ENV_VALS, 553 HideDefaultValue => Flags::HIDE_DEFAULT_VAL, 554 HiddenShortHelp => Flags::HIDDEN_SHORT_H, 555 HiddenLongHelp => Flags::HIDDEN_LONG_H, 556 AllowInvalidUtf8 => Flags::UTF8_NONE, 557 Exclusive => Flags::EXCLUSIVE 558 } 559 560 /// Deprecated in [Issue #3087](https://github.com/clap-rs/clap/issues/3087), maybe [`clap::Parser`][crate::Parser] would fit your use case? 561 #[cfg(feature = "yaml")] 562 impl FromStr for ArgSettings { 563 type Err = String; from_str(s: &str) -> Result<Self, <Self as FromStr>::Err>564 fn from_str(s: &str) -> Result<Self, <Self as FromStr>::Err> { 565 #[allow(deprecated)] 566 #[allow(unreachable_patterns)] 567 match &*s.to_ascii_lowercase() { 568 "required" => Ok(ArgSettings::Required), 569 "multipleoccurrences" => Ok(ArgSettings::MultipleOccurrences), 570 "multiplevalues" => Ok(ArgSettings::MultipleValues), 571 "multiple" => Ok(ArgSettings::Multiple), 572 "forbidemptyvalues" => Ok(ArgSettings::ForbidEmptyValues), 573 "global" => Ok(ArgSettings::Global), 574 "hidden" => Ok(ArgSettings::Hidden), 575 "takesvalue" => Ok(ArgSettings::TakesValue), 576 "usevaluedelimiter" => Ok(ArgSettings::UseValueDelimiter), 577 "nextlinehelp" => Ok(ArgSettings::NextLineHelp), 578 "requiredelimiter" => Ok(ArgSettings::RequireDelimiter), 579 "hidepossiblevalues" => Ok(ArgSettings::HidePossibleValues), 580 "allowhyphenvalues" => Ok(ArgSettings::AllowHyphenValues), 581 "allowleadinghypyhen" => Ok(ArgSettings::AllowLeadingHyphen), 582 "requireequals" => Ok(ArgSettings::RequireEquals), 583 "last" => Ok(ArgSettings::Last), 584 "ignorecase" => Ok(ArgSettings::IgnoreCase), 585 "caseinsensitive" => Ok(ArgSettings::CaseInsensitive), 586 #[cfg(feature = "env")] 587 "hideenv" => Ok(ArgSettings::HideEnv), 588 #[cfg(feature = "env")] 589 "hideenvvalues" => Ok(ArgSettings::HideEnvValues), 590 "hidedefaultvalue" => Ok(ArgSettings::HideDefaultValue), 591 "hiddenshorthelp" => Ok(ArgSettings::HiddenShortHelp), 592 "hiddenlonghelp" => Ok(ArgSettings::HiddenLongHelp), 593 "allowinvalidutf8" => Ok(ArgSettings::AllowInvalidUtf8), 594 "exclusive" => Ok(ArgSettings::Exclusive), 595 _ => Err(format!("unknown AppSetting: `{}`", s)), 596 } 597 } 598 } 599 600 #[cfg(test)] 601 mod test { 602 #[test] 603 #[cfg(feature = "yaml")] arg_settings_fromstr()604 fn arg_settings_fromstr() { 605 use super::ArgSettings; 606 607 assert_eq!( 608 "allowhyphenvalues".parse::<ArgSettings>().unwrap(), 609 ArgSettings::AllowHyphenValues 610 ); 611 assert_eq!( 612 "forbidemptyvalues".parse::<ArgSettings>().unwrap(), 613 ArgSettings::ForbidEmptyValues 614 ); 615 assert_eq!( 616 "hidepossiblevalues".parse::<ArgSettings>().unwrap(), 617 ArgSettings::HidePossibleValues 618 ); 619 assert_eq!( 620 "hidden".parse::<ArgSettings>().unwrap(), 621 ArgSettings::Hidden 622 ); 623 assert_eq!( 624 "nextlinehelp".parse::<ArgSettings>().unwrap(), 625 ArgSettings::NextLineHelp 626 ); 627 assert_eq!( 628 "requiredelimiter".parse::<ArgSettings>().unwrap(), 629 ArgSettings::RequireDelimiter 630 ); 631 assert_eq!( 632 "required".parse::<ArgSettings>().unwrap(), 633 ArgSettings::Required 634 ); 635 assert_eq!( 636 "takesvalue".parse::<ArgSettings>().unwrap(), 637 ArgSettings::TakesValue 638 ); 639 assert_eq!( 640 "usevaluedelimiter".parse::<ArgSettings>().unwrap(), 641 ArgSettings::UseValueDelimiter 642 ); 643 assert_eq!( 644 "requireequals".parse::<ArgSettings>().unwrap(), 645 ArgSettings::RequireEquals 646 ); 647 assert_eq!("last".parse::<ArgSettings>().unwrap(), ArgSettings::Last); 648 assert_eq!( 649 "hidedefaultvalue".parse::<ArgSettings>().unwrap(), 650 ArgSettings::HideDefaultValue 651 ); 652 assert_eq!( 653 "ignorecase".parse::<ArgSettings>().unwrap(), 654 ArgSettings::IgnoreCase 655 ); 656 #[cfg(feature = "env")] 657 assert_eq!( 658 "hideenv".parse::<ArgSettings>().unwrap(), 659 ArgSettings::HideEnv 660 ); 661 #[cfg(feature = "env")] 662 assert_eq!( 663 "hideenvvalues".parse::<ArgSettings>().unwrap(), 664 ArgSettings::HideEnvValues 665 ); 666 assert_eq!( 667 "hiddenshorthelp".parse::<ArgSettings>().unwrap(), 668 ArgSettings::HiddenShortHelp 669 ); 670 assert_eq!( 671 "hiddenlonghelp".parse::<ArgSettings>().unwrap(), 672 ArgSettings::HiddenLongHelp 673 ); 674 assert_eq!( 675 "allowinvalidutf8".parse::<ArgSettings>().unwrap(), 676 ArgSettings::AllowInvalidUtf8 677 ); 678 assert_eq!( 679 "exclusive".parse::<ArgSettings>().unwrap(), 680 ArgSettings::Exclusive 681 ); 682 assert!("hahahaha".parse::<ArgSettings>().is_err()); 683 } 684 } 685