PureYAML/Sources/Model/Model.FlowDescription.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
}
}