forked from vapor/postgres-nio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPSQLFrontendMessage+Equatable.swift
82 lines (72 loc) · 2.62 KB
/
PSQLFrontendMessage+Equatable.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import NIOCore
@testable import PostgresNIO
import class Foundation.JSONEncoder
import class Foundation.JSONDecoder
extension PSQLFrontendMessage.Bind: Equatable {
public static func ==(lhs: Self, rhs: Self) -> Bool {
guard lhs.preparedStatementName == rhs.preparedStatementName else {
return false
}
guard lhs.portalName == rhs.portalName else {
return false
}
guard lhs.parameters.count == rhs.parameters.count else {
return false
}
var lhsIterator = lhs.parameters.makeIterator()
var rhsIterator = rhs.parameters.makeIterator()
do {
while let lhs = lhsIterator.next(), let rhs = rhsIterator.next() {
guard lhs.psqlType == rhs.psqlType else {
return false
}
var lhsBuffer = ByteBuffer()
var rhsBuffer = ByteBuffer()
try lhs.encode(into: &lhsBuffer, context: .forTests())
try rhs.encode(into: &rhsBuffer, context: .forTests())
guard lhsBuffer == rhsBuffer else {
return false
}
}
return true
} catch {
return false
}
}
}
extension PSQLFrontendMessage: Equatable {
public static func ==(lhs: Self, rhs: Self) -> Bool {
switch (lhs, rhs) {
case (.bind(let lhs), .bind(let rhs)):
return lhs == rhs
case (.cancel(let lhs), .cancel(let rhs)):
return lhs == rhs
case (.close(let lhs), .close(let rhs)):
return lhs == rhs
case (.describe(let lhs), .describe(let rhs)):
return lhs == rhs
case (.execute(let lhs), .execute(let rhs)):
return lhs == rhs
case (.flush, .flush):
return true
case (.parse(let lhs), .parse(let rhs)):
return lhs == rhs
case (.password(let lhs), .password(let rhs)):
return lhs == rhs
case (.saslInitialResponse(let lhs), .saslInitialResponse(let rhs)):
return lhs == rhs
case (.saslResponse(let lhs), .saslResponse(let rhs)):
return lhs == rhs
case (.sslRequest(let lhs), .sslRequest(let rhs)):
return lhs == rhs
case (.sync, .sync):
return true
case (.startup(let lhs), .startup(let rhs)):
return lhs == rhs
case (.terminate, .terminate):
return lhs == rhs
default:
return false
}
}
}