public struct MoveCmdArgs: CmdArgs { /*conforms*/ public var commonState: CmdArgsCommonState fileprivate init(rawArgs: StrArrSlice) { self.commonState = .init(rawArgs) } public static let parser: CmdParser = .init( kind: .move, help: move_help_generated, flags: [ "--window-id": windowIdSubArgParser(), "--boundaries": ArgParser(\.rawBoundaries, upcastArgParserFun(parseBoundaries)), "--boundaries-action": ArgParser(\.rawBoundariesAction, upcastArgParserFun(parseBoundariesAction)), "--fail-if-fullscreen": trueBoolFlag(\.failIfFullscreen), "--fail-if-macos-native-fullscreen": trueBoolFlag(\.failIfMacosNativeFullscreen), ], posArgs: [newMandatoryPosArgParser(\.direction, parseCardinalDirectionArg, placeholder: CardinalDirection.unionLiteral)], ) public var direction: Lateinit = .uninitialized public var rawBoundaries: Boundaries? = nil public var rawBoundariesAction: WhenBoundariesCrossed? = nil public var failIfFullscreen: Bool = false public var failIfMacosNativeFullscreen: Bool = false public enum Boundaries: String, CaseIterable, Equatable, Sendable { case workspace case allMonitorsOuterFrame = "all-monitors-outer-frame" } public enum WhenBoundariesCrossed: String, CaseIterable, Equatable, Sendable { case stop = "stop" case fail = "fail" case createImplicitContainer = "create-implicit-container" } } extension MoveCmdArgs { public var boundaries: Boundaries { rawBoundaries ?? .workspace } public var boundariesAction: WhenBoundariesCrossed { rawBoundariesAction ?? .createImplicitContainer } } func parseMoveCmdArgs(_ args: StrArrSlice) -> ParsedCmd { parseSpecificCmdArgs(MoveCmdArgs(rawArgs: args), args) } private func parseBoundaries(i: SubArgParserInput) -> ParsedCliArgs { if let arg = i.nonFlagArgOrNil() { return .init(parseEnum(arg, MoveCmdArgs.Boundaries.self), advanceBy: 1) } else { return .fail(" is mandatory", advanceBy: 0) } } private func parseBoundariesAction(i: SubArgParserInput) -> ParsedCliArgs { if let arg = i.nonFlagArgOrNil() { return .init(parseEnum(arg, MoveCmdArgs.WhenBoundariesCrossed.self), advanceBy: 1) } else { return .fail(" is mandatory", advanceBy: 0) } }