Skip to content

Commit 8205f67

Browse files
committed
Use variadic generics
1 parent f55a79e commit 8205f67

File tree

6 files changed

+128
-71
lines changed

6 files changed

+128
-71
lines changed

Package.swift

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.8
1+
// swift-tools-version:5.6
22
import PackageDescription
33

44
let package = Package(
@@ -35,25 +35,22 @@ let package = Package(
3535
.product(name: "NIOTLS", package: "swift-nio"),
3636
.product(name: "NIOSSL", package: "swift-nio-ssl"),
3737
.product(name: "NIOFoundationCompat", package: "swift-nio"),
38-
],
39-
swiftSettings: [.enableExperimentalFeature("VariadicGenerics")]
38+
]
4039
),
4140
.testTarget(
4241
name: "PostgresNIOTests",
4342
dependencies: [
4443
.target(name: "PostgresNIO"),
4544
.product(name: "NIOEmbedded", package: "swift-nio"),
4645
.product(name: "NIOTestUtils", package: "swift-nio"),
47-
],
48-
swiftSettings: [.enableExperimentalFeature("VariadicGenerics")]
46+
]
4947
),
5048
.testTarget(
5149
name: "IntegrationTests",
5250
dependencies: [
5351
.target(name: "PostgresNIO"),
5452
.product(name: "NIOTestUtils", package: "swift-nio"),
55-
],
56-
swiftSettings: [.enableExperimentalFeature("VariadicGenerics")]
53+
]
5754
),
5855
]
5956
)

[email protected]

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// swift-tools-version:5.9
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "postgres-nio",
6+
platforms: [
7+
.macOS(.v10_15),
8+
.iOS(.v13),
9+
.watchOS(.v6),
10+
.tvOS(.v13),
11+
],
12+
products: [
13+
.library(name: "PostgresNIO", targets: ["PostgresNIO"]),
14+
],
15+
dependencies: [
16+
.package(url: "https://github.com/apple/swift-atomics.git", from: "1.0.2"),
17+
.package(url: "https://github.com/apple/swift-nio.git", from: "2.44.0"),
18+
.package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.13.1"),
19+
.package(url: "https://github.com/apple/swift-nio-ssl.git", from: "2.22.1"),
20+
.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0"),
21+
.package(url: "https://github.com/apple/swift-metrics.git", from: "2.0.0"),
22+
.package(url: "https://github.com/apple/swift-log.git", from: "1.4.4"),
23+
],
24+
targets: [
25+
.target(
26+
name: "PostgresNIO", dependencies: [
27+
.product(name: "Atomics", package: "swift-atomics"),
28+
.product(name: "Crypto", package: "swift-crypto"),
29+
.product(name: "Logging", package: "swift-log"),
30+
.product(name: "Metrics", package: "swift-metrics"),
31+
.product(name: "NIO", package: "swift-nio"),
32+
.product(name: "NIOCore", package: "swift-nio"),
33+
.product(name: "NIOPosix", package: "swift-nio"),
34+
.product(name: "NIOTransportServices", package: "swift-nio-transport-services"),
35+
.product(name: "NIOTLS", package: "swift-nio"),
36+
.product(name: "NIOSSL", package: "swift-nio-ssl"),
37+
.product(name: "NIOFoundationCompat", package: "swift-nio"),
38+
],
39+
swiftSettings: [.enableExperimentalFeature("VariadicGenerics")]
40+
),
41+
.testTarget(
42+
name: "PostgresNIOTests",
43+
dependencies: [
44+
.target(name: "PostgresNIO"),
45+
.product(name: "NIOEmbedded", package: "swift-nio"),
46+
.product(name: "NIOTestUtils", package: "swift-nio"),
47+
],
48+
swiftSettings: [.enableExperimentalFeature("VariadicGenerics")]
49+
),
50+
.testTarget(
51+
name: "IntegrationTests",
52+
dependencies: [
53+
.target(name: "PostgresNIO"),
54+
.product(name: "NIOTestUtils", package: "swift-nio"),
55+
],
56+
swiftSettings: [.enableExperimentalFeature("VariadicGenerics")]
57+
),
58+
]
59+
)

Sources/PostgresNIO/New/PostgresRow-multi-decode.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// NOTE: THIS FILE IS AUTO-GENERATED BY dev/generate-postgresrow-multi-decode.sh
22

3-
#if swift(<5.9)
3+
#if compiler(<5.9)
44
extension PostgresRow {
55
@inlinable
66
@_alwaysEmitIntoClient

Sources/PostgresNIO/New/PostgresRowSequence-multi-decode.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// NOTE: THIS FILE IS AUTO-GENERATED BY dev/generate-postgresrowsequence-multi-decode.sh
22

3-
#if swift(<5.9)
3+
#if compiler(<5.9)
44
extension AsyncSequence where Element == PostgresRow {
55
@inlinable
66
@_alwaysEmitIntoClient
@@ -212,3 +212,4 @@ extension AsyncSequence where Element == PostgresRow {
212212
self.decode((T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14).self, context: .default, file: file, line: line)
213213
}
214214
}
215+
#endif

Sources/PostgresNIO/New/VariadicGenerics.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
#if compiler(>=5.9)
12
#if hasFeature(VariadicGenerics)
2-
33
extension PostgresRow {
44

55
// --- snip TODO: Remove once bug is fixed, that disallows tuples of one
@@ -152,6 +152,6 @@ extension AsyncSequence where Element == PostgresRow {
152152
try self.decode(columnType, context: .default, file: file, line: line)
153153
}
154154
}
155-
#endif
156-
157-
#endif
155+
#endif // AsyncSequence extension
156+
#endif // hasFeature
157+
#endif // compiler(>=5.9)

Tests/PostgresNIOTests/New/PostgresCodableTests.swift

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,62 +4,62 @@ import NIOCore
44

55
final class PostgresCodableTests: XCTestCase {
66

7-
// func testDecodeAnOptionalFromARow() {
8-
// let row = PostgresRow(
9-
// data: .makeTestDataRow(nil, ByteBuffer(string: "Hello world!")),
10-
// lookupTable: ["id": 0, "name": 1],
11-
// columns: [
12-
// RowDescription.Column(
13-
// name: "id",
14-
// tableOID: 1,
15-
// columnAttributeNumber: 1,
16-
// dataType: .text,
17-
// dataTypeSize: 0,
18-
// dataTypeModifier: 0,
19-
// format: .binary
20-
// ),
21-
// RowDescription.Column(
22-
// name: "id",
23-
// tableOID: 1,
24-
// columnAttributeNumber: 1,
25-
// dataType: .text,
26-
// dataTypeSize: 0,
27-
// dataTypeModifier: 0,
28-
// format: .binary
29-
// )
30-
// ]
31-
// )
32-
//
33-
// var result: (String?, String?)
34-
// XCTAssertNoThrow(result = try row.decode(String?.self, String?.self, context: .default))
35-
// XCTAssertNil(result.0)
36-
// XCTAssertEqual(result.1, "Hello world!")
37-
// }
38-
//
39-
// func testDecodeMissingValueError() {
40-
// let row = PostgresRow(
41-
// data: .makeTestDataRow(nil),
42-
// lookupTable: ["name": 0],
43-
// columns: [
44-
// RowDescription.Column(
45-
// name: "id",
46-
// tableOID: 1,
47-
// columnAttributeNumber: 1,
48-
// dataType: .text,
49-
// dataTypeSize: 0,
50-
// dataTypeModifier: 0,
51-
// format: .binary
52-
// )
53-
// ]
54-
// )
55-
//
56-
// XCTAssertThrowsError(try row.decode(String.self, context: .default)) {
57-
// XCTAssertEqual(($0 as? PostgresDecodingError)?.line, #line - 1)
58-
// XCTAssertEqual(($0 as? PostgresDecodingError)?.file, #file)
59-
//
60-
// XCTAssertEqual(($0 as? PostgresDecodingError)?.code, .missingData)
61-
// XCTAssert(($0 as? PostgresDecodingError)?.targetType == String.self)
62-
// XCTAssertEqual(($0 as? PostgresDecodingError)?.postgresType, .text)
63-
// }
64-
// }
7+
func testDecodeAnOptionalFromARow() {
8+
let row = PostgresRow(
9+
data: .makeTestDataRow(nil, ByteBuffer(string: "Hello world!")),
10+
lookupTable: ["id": 0, "name": 1],
11+
columns: [
12+
RowDescription.Column(
13+
name: "id",
14+
tableOID: 1,
15+
columnAttributeNumber: 1,
16+
dataType: .text,
17+
dataTypeSize: 0,
18+
dataTypeModifier: 0,
19+
format: .binary
20+
),
21+
RowDescription.Column(
22+
name: "id",
23+
tableOID: 1,
24+
columnAttributeNumber: 1,
25+
dataType: .text,
26+
dataTypeSize: 0,
27+
dataTypeModifier: 0,
28+
format: .binary
29+
)
30+
]
31+
)
32+
33+
var result: (String?, String?)
34+
XCTAssertNoThrow(result = try row.decode((String?, String?).self))
35+
XCTAssertNil(result.0)
36+
XCTAssertEqual(result.1, "Hello world!")
37+
}
38+
39+
func testDecodeMissingValueError() {
40+
let row = PostgresRow(
41+
data: .makeTestDataRow(nil),
42+
lookupTable: ["name": 0],
43+
columns: [
44+
RowDescription.Column(
45+
name: "id",
46+
tableOID: 1,
47+
columnAttributeNumber: 1,
48+
dataType: .text,
49+
dataTypeSize: 0,
50+
dataTypeModifier: 0,
51+
format: .binary
52+
)
53+
]
54+
)
55+
56+
XCTAssertThrowsError(try row.decode(String.self)) {
57+
XCTAssertEqual(($0 as? PostgresDecodingError)?.line, #line - 1)
58+
XCTAssertEqual(($0 as? PostgresDecodingError)?.file, #file)
59+
60+
XCTAssertEqual(($0 as? PostgresDecodingError)?.code, .missingData)
61+
XCTAssert(($0 as? PostgresDecodingError)?.targetType == String.self)
62+
XCTAssertEqual(($0 as? PostgresDecodingError)?.postgresType, .text)
63+
}
64+
}
6565
}

0 commit comments

Comments
 (0)