aerospace fork
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495public func parseCmdArgs(_ args: StrArrSlice) -> ParsedCmd<any CmdArgs> { let subcommand = String(args.first ?? "") if subcommand.isEmpty { return .failure("Can't parse empty string command", EXIT_CODE_TWO) } if let subcommandParser: any SubCommandParserProtocol = subcommandParsers[subcommand] { return subcommandParser.parse(args: args.slice(1...).orDie()) } else { return .failure("Unrecognized subcommand '\(subcommand)'", EXIT_CODE_TWO) }}
public protocol CmdArgs: ConvenienceMutable, Equatable, CustomStringConvertible, AeroAny, Sendable{ associatedtype ExitCodeType: ExitCode = BinaryExitCode static var parser: CmdParser<Self> { get } var commonState: CmdArgsCommonState { get set }}
public struct CmdArgsCommonState: ConvenienceMutable, Equatable, Sendable { let rawArgsForStrRepr: EquatableNoop<StrArrSlice> var windowId: UInt32? = nil var workspaceName: WorkspaceName? = nil public var explicitStdinFlag: Bool? = nil
public init(_ raw: StrArrSlice) { rawArgsForStrRepr = .init(raw) }}
extension CmdArgs { public static var info: CmdStaticInfo { Self.parser.info }
public var windowId: UInt32? { get { commonState.windowId } set(value) { commonState.windowId = value } }
public var workspaceName: WorkspaceName? { get { commonState.workspaceName } set(value) { commonState.workspaceName = value } }
public var failExitCode: Int32 { ExitCodeType.fail.rawValue }
public func equals(_ other: any CmdArgs) -> Bool { // My brain is cursed with Java (other as? Self).flatMap { self == $0 } ?? false }
public var description: String { switch Self.info.kind { case .execAndForget: CmdKind.execAndForget.rawValue + " " + (self as! ExecAndForgetCmdArgs).bashScript default: ([Self.info.kind.rawValue] + commonState.rawArgsForStrRepr.value.toArray()).joinArgs() } }}
public struct CmdParser<Root>: Sendable { let info: CmdStaticInfo let flags: [String: any ArgParserProtocol<SubArgParserInput, Root, ()>] let positionalArgs: [any ArgParserProtocol<PosArgParserInput, Root, PosArgParserContext>] let conflictingOptions: [Set<String>]
init( kind: CmdKind, help: String, flags: [String: any ArgParserProtocol<SubArgParserInput, Root, ()>], posArgs: [any ArgParserProtocol<PosArgParserInput, Root, PosArgParserContext>], conflictingOptions: [Set<String>] = [], ) { self.info = CmdStaticInfo(help: help, kind: kind) self.flags = flags self.positionalArgs = posArgs self.conflictingOptions = conflictingOptions }}
public struct CmdStaticInfo: Equatable, Sendable { public let help: String public let kind: CmdKind
public init( help: String, kind: CmdKind, ) { self.help = help self.kind = kind }}