Files
swift-hpa/Sources/hpa/Internal/GlobalOptions.swift

77 lines
1.6 KiB
Swift

import ArgumentParser
import CliClient
struct BasicGlobalOptions: ParsableArguments {
@Flag(
name: .shortAndLong,
help: "Increase logging level (can be passed multiple times)."
)
var verbose: Int
@Flag(
name: .shortAndLong,
help: "Supress logging."
)
var quiet = false
@Option(
name: .shortAndLong,
help: "Optional shell to use when calling shell commands.",
completion: .file()
)
var shell: String?
}
@dynamicMemberLookup
struct GlobalOptions: ParsableArguments {
@Option(
name: .shortAndLong,
help: "Optional path to the ansible hpa playbook directory."
)
var playbookDir: String?
@Option(
name: .shortAndLong,
help: "Optional path to the ansible inventory to use."
)
var inventoryPath: String?
@Flag(
name: .long,
help: "Supress only playbook logging."
)
var quietOnlyPlaybook = false
@OptionGroup var basic: BasicGlobalOptions
subscript<T>(dynamicMember keyPath: WritableKeyPath<BasicGlobalOptions, T>) -> T {
get { basic[keyPath: keyPath] }
set { basic[keyPath: keyPath] = newValue }
}
subscript<T>(dynamicMember keyPath: KeyPath<BasicGlobalOptions, T>) -> T {
basic[keyPath: keyPath]
}
}
extension GlobalOptions {
func loggingOptions(commandName: String) -> CliClient.LoggingOptions {
.init(
commandName: commandName,
logLevel: .init(globals: basic, quietOnlyPlaybook: quietOnlyPlaybook)
)
}
}
extension BasicGlobalOptions {
func loggingOptions(commandName: String) -> CliClient.LoggingOptions {
.init(
commandName: commandName,
logLevel: .init(globals: self, quietOnlyPlaybook: false)
)
}
}