Changed Array<UInt8>.escaped property to .escaping(_:) method to handle configured cell delimiters
This commit is contained in:
parent
4b13839018
commit
266d4efac4
|
@ -9,13 +9,17 @@ final class AsyncKeyedEncoder<K>: KeyedEncodingContainerProtocol where K: Coding
|
|||
self.encoder = encoder
|
||||
}
|
||||
|
||||
var delimiter: UInt8? {
|
||||
return self.encoder.configuration.cellDelimiter
|
||||
}
|
||||
|
||||
func _encode(_ value: [UInt8], for key: K) {
|
||||
switch self.encoder.container.section {
|
||||
case .header:
|
||||
let bytes = Array([[34], key.stringValue.bytes.escaped, [34]].joined())
|
||||
let bytes = key.stringValue.bytes.escaping(self.delimiter)
|
||||
self.encoder.container.cells.append(bytes)
|
||||
case .row:
|
||||
let bytes = Array([[34], value.escaped, [34]].joined())
|
||||
let bytes = value.escaping(self.delimiter)
|
||||
self.encoder.container.cells.append(bytes)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,18 +9,22 @@ final class AsyncSingleValueEncoder: SingleValueEncodingContainer {
|
|||
self.encoder = encoder
|
||||
}
|
||||
|
||||
var delimiter: UInt8? {
|
||||
return self.encoder.configuration.cellDelimiter
|
||||
}
|
||||
|
||||
func encodeNil() throws {
|
||||
let value = self.encoder.encodingOptions.nilCodingStrategy.bytes()
|
||||
self.encoder.container.cells.append(value.escaped)
|
||||
let value = self.encoder.encodingOptions.nilCodingStrategy.bytes().escaping(self.delimiter)
|
||||
self.encoder.container.cells.append(value)
|
||||
}
|
||||
func encode(_ value: Bool) throws {
|
||||
let value = self.encoder.encodingOptions.boolCodingStrategy.bytes(from: value)
|
||||
self.encoder.container.cells.append(value.escaped)
|
||||
let value = self.encoder.encodingOptions.boolCodingStrategy.bytes(from: value).escaping(self.delimiter)
|
||||
self.encoder.container.cells.append(value)
|
||||
}
|
||||
func encode(_ value: String) throws { self.encoder.container.cells.append(value.bytes.escaped) }
|
||||
func encode(_ value: Double) throws { self.encoder.container.cells.append(value.bytes.escaped) }
|
||||
func encode(_ value: Float) throws { self.encoder.container.cells.append(value.bytes.escaped) }
|
||||
func encode(_ value: Int) throws { self.encoder.container.cells.append(value.bytes.escaped) }
|
||||
func encode(_ value: String) throws { self.encoder.container.cells.append(value.bytes.escaping(self.delimiter)) }
|
||||
func encode(_ value: Double) throws { self.encoder.container.cells.append(value.bytes.escaping(self.delimiter)) }
|
||||
func encode(_ value: Float) throws { self.encoder.container.cells.append(value.bytes.escaping(self.delimiter)) }
|
||||
func encode(_ value: Int) throws { self.encoder.container.cells.append(value.bytes.escaping(self.delimiter)) }
|
||||
|
||||
func encode<T>(_ value: T) throws where T : Encodable {
|
||||
let column = self.codingPath.map { $0.stringValue }.joined(separator: ".")
|
||||
|
|
|
@ -14,8 +14,13 @@ extension String {
|
|||
}
|
||||
|
||||
extension Array where Element == UInt8 {
|
||||
var escaped: [UInt8] {
|
||||
return self.contains(34) ? Array(self.split(separator: 34).joined(separator: [34, 34])) : self
|
||||
func escaping(_ character: UInt8?) -> [UInt8] {
|
||||
guard let code = character else {
|
||||
return self
|
||||
}
|
||||
|
||||
let contents = self.contains(code) ? Array(self.split(separator: code).joined(separator: [code, code])) : self
|
||||
return Array([[code], contents, [code]].joined())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue