I'm trying to figure out how to use the @Flag
's exclusivity property.
I have the following:
struct CharacterCount: ParsableCommand {
enum CharSet: String, CaseIterable {
case whitespace
case numbers
case vowels
}
@Argument(help: "String to count the characters of") var string: String
@Flag(default: CharSet.whitespace, exclusivity: .exclusive, help: "") var characterSets: CharSet
func run() throws {
}
}
What I'd like to do is to be able to pass in something like this to my tool:
CharacterCount Alice --whitespace --number
And have the tool only grab one. I know I can do this with exclusivity
, but I can't figure out how to get it work. If I make characterSet
s an array, it doesn't compile anymore:
Cannot convert value of type 'Flag<CharacterCount.CharSet>' to specified type '[CharacterCount.CharSet]'
If I don't mark it as an array and pass more than one case, the tool crashes with:
Error: Value at position InputOrigin(_elements: Set([ArgumentParser.InputOrigin.Element.argumentIndex(2)])) has already been set from value at position InputOrigin(_elements: Set([ArgumentParser.InputOrigin.Element.argumentIndex(1)])).
Usage: character-count <string> [--whitespace] [--numbers] [--vowels]
I wasn't able to find the answer to this in the docs.