public struct EnableCmdArgs: CmdArgs { /*conforms*/ public var commonState: CmdArgsCommonState fileprivate init(rawArgs: StrArrSlice) { self.commonState = .init(rawArgs) } public static let parser: CmdParser = .init( kind: .enable, help: enable_help_generated, flags: [ "--fail-if-noop": trueBoolFlag(\.failIfNoop), ], posArgs: [newMandatoryPosArgParser(\.targetState, parseState, placeholder: EnableCmdArgs.State.unionLiteral)], ) public var targetState: Lateinit = .uninitialized public var failIfNoop: Bool = false public init(rawArgs: [String], targetState: State) { self.commonState = .init(rawArgs.slice) self.targetState = .initialized(targetState) } public enum State: String, CaseIterable, Sendable { case on, off, toggle } } func parseEnableCmdArgs(_ args: StrArrSlice) -> ParsedCmd { return parseSpecificCmdArgs(EnableCmdArgs(rawArgs: args), args) .filterNot("--fail-if-noop is incompatible with 'toggle' argument") { $0.targetState.val == .toggle && $0.failIfNoop } } private func parseState(i: PosArgParserInput) -> ParsedCliArgs { .init(parseEnum(i.arg, EnableCmdArgs.State.self), advanceBy: 1) }