-
-
Notifications
You must be signed in to change notification settings - Fork 488
Expand file tree
/
Copy pathSummonWorkspaceCmdArgs.swift
More file actions
44 lines (37 loc) · 1.59 KB
/
SummonWorkspaceCmdArgs.swift
File metadata and controls
44 lines (37 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
private let actio = "<action>"
public struct SummonWorkspaceCmdArgs: CmdArgs {
public let rawArgs: EquatableNoop<[String]>
public init(rawArgs: [String]) { self.rawArgs = .init(rawArgs) }
public static let parser: CmdParser<Self> = cmdParser(
kind: .summonWorkspace,
allowInConfig: true,
help: summon_workspace_help_generated,
options: [
"--fail-if-noop": trueBoolFlag(\.failIfNoop),
"--when-visible": ArgParser(\.rawWhenVisibleAction, upcastArgParserFun(parseWhenVisibleAction)),
],
arguments: [newArgParser(\.target, parseWorkspaceName, mandatoryArgPlaceholder: "<workspace>")]
)
public var windowId: UInt32? // unused
public var workspaceName: WorkspaceName? // unused
public var target: Lateinit<WorkspaceName> = .uninitialized
public var failIfNoop: Bool = false
public var rawWhenVisibleAction: WhenVisible? = nil
public enum WhenVisible: String, CaseIterable, Equatable {
case focus = "focus"
case swap = "swap"
}
}
public extension SummonWorkspaceCmdArgs {
var whenVisible: WhenVisible { rawWhenVisibleAction ?? .focus }
}
private func parseWorkspaceName(arg: String, nextArgs: inout [String]) -> Parsed<WorkspaceName> {
WorkspaceName.parse(arg)
}
private func parseWhenVisibleAction(arg: String, nextArgs: inout [String]) -> Parsed<SummonWorkspaceCmdArgs.WhenVisible> {
if let arg = nextArgs.nextNonFlagOrNil() {
return parseEnum(arg, SummonWorkspaceCmdArgs.WhenVisible.self)
} else {
return .failure("\(actio) is mandatory")
}
}