@@ -532,97 +532,6 @@ extension Flag {
532
532
}
533
533
}
534
534
535
- // - MARK: Unavailable CaseIterable/RawValue == String
536
-
537
- extension Flag where Value: CaseIterable , Value: RawRepresentable , Value: Equatable , Value. RawValue == String {
538
- /// Creates a property that gets its value from the presence of a flag,
539
- /// where the allowed flags are defined by a case-iterable type.
540
- ///
541
- /// - Parameters:
542
- /// - name: A specification for what names are allowed for this flag.
543
- /// - initial: A default value to use for this property. If `initial` is
544
- /// `nil`, this flag is required.
545
- /// - exclusivity: The behavior to use when multiple flags are specified.
546
- /// - help: Information about how to use this flag.
547
- @available ( * , unavailable, message: " Add 'EnumerableFlag' conformance to your value type and, if needed, specify the 'name' of each case there. " )
548
- public init (
549
- name: NameSpecification = . long,
550
- default initial: Value ? = nil ,
551
- exclusivity: FlagExclusivity = . exclusive,
552
- help: ArgumentHelp ? = nil
553
- ) {
554
- self . init ( _parsedValue: . init { key in
555
- // This gets flipped to `true` the first time one of these flags is
556
- // encountered.
557
- var hasUpdated = false
558
- let defaultValue = initial. map ( String . init ( describing: ) )
559
-
560
- let args = Value . allCases. map { value -> ArgumentDefinition in
561
- let caseKey = InputKey ( rawValue: value. rawValue)
562
- let help = ArgumentDefinition . Help ( options: initial != nil ? . isOptional : [ ] , help: help, defaultValue: defaultValue, key: key, isComposite: true )
563
- return ArgumentDefinition . flag ( name: name, key: key, caseKey: caseKey, help: help, parsingStrategy: . default, initialValue: initial, update: . nullary( { ( origin, name, values) in
564
- hasUpdated = try ArgumentSet . updateFlag ( key: key, value: value, origin: origin, values: & values, hasUpdated: hasUpdated, exclusivity: exclusivity)
565
- } ) )
566
- }
567
- return ArgumentSet ( args)
568
- } )
569
- }
570
- }
571
-
572
- extension Flag {
573
- /// Creates a property that gets its value from the presence of a flag,
574
- /// where the allowed flags are defined by a case-iterable type.
575
- @available ( * , unavailable, message: " Add 'EnumerableFlag' conformance to your value type and, if needed, specify the 'name' of each case there. " )
576
- public init < Element> (
577
- name: NameSpecification = . long,
578
- exclusivity: FlagExclusivity = . exclusive,
579
- help: ArgumentHelp ? = nil
580
- ) where Value == Element ? , Element: CaseIterable , Element: Equatable , Element: RawRepresentable , Element. RawValue == String {
581
- self . init ( _parsedValue: . init { key in
582
- // This gets flipped to `true` the first time one of these flags is
583
- // encountered.
584
- var hasUpdated = false
585
-
586
- let args = Element . allCases. map { value -> ArgumentDefinition in
587
- let caseKey = InputKey ( rawValue: value. rawValue)
588
- let help = ArgumentDefinition . Help ( options: . isOptional, help: help, key: key, isComposite: true )
589
- return ArgumentDefinition . flag ( name: name, key: key, caseKey: caseKey, help: help, parsingStrategy: . default, initialValue: nil as Element ? , update: . nullary( { ( origin, name, values) in
590
- hasUpdated = try ArgumentSet . updateFlag ( key: key, value: value, origin: origin, values: & values, hasUpdated: hasUpdated, exclusivity: exclusivity)
591
- } ) )
592
- }
593
- return ArgumentSet ( args)
594
- } )
595
- }
596
-
597
- /// Creates an array property that gets its values from the presence of
598
- /// zero or more flags, where the allowed flags are defined by a
599
- /// `CaseIterable` type.
600
- ///
601
- /// This property has an empty array as its default value.
602
- ///
603
- /// - Parameters:
604
- /// - name: A specification for what names are allowed for this flag.
605
- /// - help: Information about how to use this flag.
606
- @available ( * , unavailable, message: " Add 'EnumerableFlag' conformance to your value type and, if needed, specify the 'name' of each case there. " )
607
- public init < Element> (
608
- name: NameSpecification = . long,
609
- help: ArgumentHelp ? = nil
610
- ) where Value == Array < Element > , Element: CaseIterable , Element: RawRepresentable , Element. RawValue == String {
611
- self . init ( _parsedValue: . init { key in
612
- let args = Element . allCases. map { value -> ArgumentDefinition in
613
- let caseKey = InputKey ( rawValue: value. rawValue)
614
- let help = ArgumentDefinition . Help ( options: . isOptional, help: help, key: key, isComposite: true )
615
- return ArgumentDefinition . flag ( name: name, key: key, caseKey: caseKey, help: help, parsingStrategy: . default, initialValue: [ Element] ( ) , update: . nullary( { ( origin, name, values) in
616
- values. update ( forKey: key, inputOrigin: origin, initial: [ Element] ( ) , closure: {
617
- $0. append ( value)
618
- } )
619
- } ) )
620
- }
621
- return ArgumentSet ( args)
622
- } )
623
- }
624
- }
625
-
626
535
extension ArgumentDefinition {
627
536
static func flag< V> ( name: NameSpecification , key: InputKey , caseKey: InputKey , help: Help , parsingStrategy: ArgumentDefinition . ParsingStrategy , initialValue: V ? , update: Update ) -> ArgumentDefinition {
628
537
return ArgumentDefinition ( kind: . name( key: caseKey, specification: name) , help: help, completion: . default, parsingStrategy: parsingStrategy, update: update, initial: { origin, values in
0 commit comments