Files
XcodeGen/Sources/ProjectSpec/Scheme/SchemeEnvironmentVariable.swift
2019-11-12 21:19:08 +11:00

57 lines
2.0 KiB
Swift

import Foundation
import JSONUtilities
import XcodeProj
extension XCScheme.EnvironmentVariable: JSONObjectConvertible {
public static let enabledDefault = true
private static func parseValue(_ value: Any) -> String {
if let bool = value as? Bool {
return bool ? "YES" : "NO"
} else {
return String(describing: value)
}
}
public init(jsonDictionary: JSONDictionary) throws {
let value: String
if let jsonValue = jsonDictionary["value"] {
value = XCScheme.EnvironmentVariable.parseValue(jsonValue)
} else {
// will throw error
value = try jsonDictionary.json(atKeyPath: "value")
}
let variable: String = try jsonDictionary.json(atKeyPath: "variable")
let enabled: Bool = jsonDictionary.json(atKeyPath: "isEnabled") ?? XCScheme.EnvironmentVariable.enabledDefault
self.init(variable: variable, value: value, enabled: enabled)
}
static func parseAll(jsonDictionary: JSONDictionary) throws -> [XCScheme.EnvironmentVariable] {
if let variablesDictionary: [String: Any] = jsonDictionary.json(atKeyPath: "environmentVariables") {
return variablesDictionary.mapValues(parseValue)
.map { XCScheme.EnvironmentVariable(variable: $0.key, value: $0.value, enabled: true) }
.sorted { $0.variable < $1.variable }
} else if let variablesArray: [JSONDictionary] = jsonDictionary.json(atKeyPath: "environmentVariables") {
return try variablesArray.map(XCScheme.EnvironmentVariable.init)
} else {
return []
}
}
}
extension XCScheme.EnvironmentVariable: JSONEncodable {
public func toJSONValue() -> Any {
var dict: [String: Any] = [
"variable": variable,
"value": value,
]
if enabled != XCScheme.EnvironmentVariable.enabledDefault {
dict["isEnabled"] = enabled
}
return dict
}
}