51 lines
1.4 KiB
Swift
51 lines
1.4 KiB
Swift
import Commander
|
|
import Foundation
|
|
|
|
struct CLIOutputPreferences {
|
|
let format: OutputFormat
|
|
let jsonOnly: Bool
|
|
let pretty: Bool
|
|
|
|
var usesJSONOutput: Bool {
|
|
self.jsonOnly || self.format == .json
|
|
}
|
|
|
|
static func from(values: ParsedValues) -> CLIOutputPreferences {
|
|
let jsonOnly = values.flags.contains("jsonOnly")
|
|
let format = CodexBarCLI.decodeFormat(from: values)
|
|
let pretty = values.flags.contains("pretty")
|
|
return CLIOutputPreferences(format: format, jsonOnly: jsonOnly, pretty: pretty)
|
|
}
|
|
|
|
static func from(argv: [String]) -> CLIOutputPreferences {
|
|
var jsonOnly = false
|
|
var pretty = false
|
|
var format: OutputFormat = .text
|
|
|
|
var index = 0
|
|
while index < argv.count {
|
|
let arg = argv[index]
|
|
switch arg {
|
|
case "--json-only":
|
|
jsonOnly = true
|
|
format = .json
|
|
case "--json":
|
|
format = .json
|
|
case "--pretty":
|
|
pretty = true
|
|
case "--format":
|
|
let next = index + 1
|
|
if next < argv.count, let parsed = OutputFormat(argument: argv[next]) {
|
|
format = parsed
|
|
index += 1
|
|
}
|
|
default:
|
|
break
|
|
}
|
|
index += 1
|
|
}
|
|
|
|
return CLIOutputPreferences(format: format, jsonOnly: jsonOnly, pretty: pretty)
|
|
}
|
|
}
|