75 lines
1.8 KiB
Swift
75 lines
1.8 KiB
Swift
extension PureYAML.Model.Value {
|
|
var flowDescription: String {
|
|
switch self {
|
|
case .null:
|
|
"null"
|
|
case let .bool(value):
|
|
value ? "true" : "false"
|
|
case let .double(value):
|
|
String(value)
|
|
case let .int(value):
|
|
String(value)
|
|
case let .mapping(value):
|
|
value.flowDescription
|
|
case let .sequence(value):
|
|
value.flowDescription
|
|
case let .string(value):
|
|
value.quotedFlowDescription
|
|
}
|
|
}
|
|
}
|
|
|
|
extension PureYAML.Model.Mapping {
|
|
var flowDescription: String {
|
|
let pairs = pairs
|
|
.map { pair in
|
|
"\(pair.keyNode.flowDescription): \(pair.value.flowDescription)"
|
|
}
|
|
.joined(separator: ", ")
|
|
return "{\(pairs)}"
|
|
}
|
|
}
|
|
|
|
extension PureYAML.Model.Key {
|
|
var flowDescription: String {
|
|
switch self {
|
|
case let .mapping(value):
|
|
value.flowDescription
|
|
case let .sequence(value):
|
|
value.flowDescription
|
|
case let .string(value):
|
|
value.quotedFlowDescription
|
|
}
|
|
}
|
|
}
|
|
|
|
extension [PureYAML.Model.Value] {
|
|
var flowDescription: String {
|
|
"[\(map(\.flowDescription).joined(separator: ", "))]"
|
|
}
|
|
}
|
|
|
|
private extension String {
|
|
var quotedFlowDescription: String {
|
|
var output = "\""
|
|
for character in self {
|
|
switch character {
|
|
case "\"":
|
|
output += "\\\""
|
|
case "\\":
|
|
output += "\\\\"
|
|
case "\n":
|
|
output += "\\n"
|
|
case "\r":
|
|
output += "\\r"
|
|
case "\t":
|
|
output += "\\t"
|
|
default:
|
|
output.append(character)
|
|
}
|
|
}
|
|
output += "\""
|
|
return output
|
|
}
|
|
}
|