forked from vapor/postgres-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPostgreSQLData+Data.swift
37 lines (32 loc) · 1.1 KB
/
PostgreSQLData+Data.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
extension Data: PostgreSQLDataConvertible {
/// See `PostgreSQLDataConvertible`.
public static func convertFromPostgreSQLData(_ data: PostgreSQLData) throws -> Data {
guard case .bytea = data.type else {
throw PostgreSQLError.decode(self, from: data)
}
switch data.storage{
case .text(let string): return Data(hexString: .init(string.dropFirst(2)))
case .binary(let value): return value
case .null: throw PostgreSQLError.decode(self, from: data)
}
}
/// See `PostgreSQLDataConvertible`.
public func convertToPostgreSQLData() throws -> PostgreSQLData {
return PostgreSQLData(.bytea, binary: self)
}
}
extension Data {
/// Initialize data from a hex string.
internal init(hexString: String) {
var data = Data()
var gen = hexString.makeIterator()
while let c1 = gen.next(), let c2 = gen.next() {
let s = String([c1, c2])
guard let d = UInt8(s, radix: 16) else {
break
}
data.append(d)
}
self.init(data)
}
}