diff --git a/Package.resolved b/Package.resolved index 0609b63..d36443c 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,17 +6,8 @@ "repositoryURL": "https://github.com/apple/swift-nio.git", "state": { "branch": null, - "revision": "29a9f2aca71c8afb07e291336f1789337ce235dd", - "version": "1.13.2" - } - }, - { - "package": "swift-nio-zlib-support", - "repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git", - "state": { - "branch": null, - "revision": "37760e9a52030bb9011972c5213c3350fa9d41fd", - "version": "1.0.0" + "revision": "b8368b6e09b7993896c42a6199103a73ecc1dbf9", + "version": "2.0.0" } } ] diff --git a/Package.swift b/Package.swift index 53400b6..4a4eb4c 100644 --- a/Package.swift +++ b/Package.swift @@ -9,11 +9,11 @@ let package = Package( .library(name: "SwiftDataLoader", targets: ["SwiftDataLoader"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", from: "1.13.2"), + .package(url: "https://github.com/apple/swift-nio.git", from: "2.0.0"), ], targets: [ .target(name: "SwiftDataLoader", dependencies: ["NIO"]), .testTarget(name: "SwiftDataLoaderTests", dependencies: ["SwiftDataLoader"]), ], - swiftLanguageVersions: [.v3, .v4, .v4_2, .version("5")] + swiftLanguageVersions: [.v5] ) diff --git a/Package@swift-4.2.swift b/Package@swift-4.2.swift deleted file mode 100644 index 7d4fb7e..0000000 --- a/Package@swift-4.2.swift +++ /dev/null @@ -1,19 +0,0 @@ -// swift-tools-version:4.2 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "SwiftDataLoader", - products: [ - .library(name: "SwiftDataLoader", targets: ["SwiftDataLoader"]), - ], - dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", from: "1.8.0"), - ], - targets: [ - .target(name: "SwiftDataLoader", dependencies: ["NIO"]), - .testTarget(name: "SwiftDataLoaderTests", dependencies: ["SwiftDataLoader"]), - ], - swiftLanguageVersions: [.v3, .v4, .v4_2] -) diff --git a/Package@swift-4.swift b/Package@swift-4.swift deleted file mode 100644 index 8febd58..0000000 --- a/Package@swift-4.swift +++ /dev/null @@ -1,19 +0,0 @@ -// swift-tools-version:4.0 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "SwiftDataLoader", - products: [ - .library(name: "SwiftDataLoader", targets: ["SwiftDataLoader"]), - ], - dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", from: "1.8.0"), - ], - targets: [ - .target(name: "SwiftDataLoader", dependencies: ["NIO"]), - .testTarget(name: "SwiftDataLoaderTests", dependencies: ["SwiftDataLoader"]), - ], - swiftLanguageVersions: [3, 4] -) diff --git a/Sources/SwiftDataLoader/DataLoader.swift b/Sources/SwiftDataLoader/DataLoader.swift index 851e447..2785496 100644 --- a/Sources/SwiftDataLoader/DataLoader.swift +++ b/Sources/SwiftDataLoader/DataLoader.swift @@ -38,19 +38,19 @@ final public class DataLoader { return cachedFuture } - let promise: EventLoopPromise = eventLoop.next().newPromise() + let promise: EventLoopPromise = eventLoop.next().makePromise() if options.batchingEnabled { queue.append((key: key, promise: promise)) } else { _ = try batchLoadFunction([key]).map { results in if results.isEmpty { - promise.fail(error: DataLoaderError.noValueForKey("Did not return value for key: \(key)")) + promise.fail(DataLoaderError.noValueForKey("Did not return value for key: \(key)")) } else { let result = results[0] switch result { - case .success(let value): promise.succeed(result: value) - case .failure(let error): promise.fail(error: error) + case .success(let value): promise.succeed(value) + case .failure(let error): promise.fail(error) } } } @@ -66,9 +66,9 @@ final public class DataLoader { } public func loadMany(keys: [Key], on eventLoop: EventLoopGroup) throws -> EventLoopFuture<[Value]> { - guard !keys.isEmpty else { return eventLoop.next().newSucceededFuture(result: []) } + guard !keys.isEmpty else { return eventLoop.next().makeSucceededFuture([]) } - let promise: EventLoopPromise<[Value]> = eventLoop.next().newPromise() + let promise: EventLoopPromise<[Value]> = eventLoop.next().makePromise() var result = [Value]() @@ -79,7 +79,7 @@ final public class DataLoader { result.append(value) if result.count == keys.count { - promise.succeed(result: result) + promise.succeed(result) } } } @@ -102,8 +102,8 @@ final public class DataLoader { let cacheKey = options.cacheKeyFunction?(key) ?? key if futureCache[cacheKey] == nil { - let promise: EventLoopPromise = eventLoop.next().newPromise() - promise.succeed(result: value) + let promise: EventLoopPromise = eventLoop.next().makePromise() + promise.succeed(value) futureCache[cacheKey] = promise.futureResult } @@ -112,33 +112,33 @@ final public class DataLoader { } // MARK: - Private - private func dispatchQueueBatch(queue: LoaderQueue, on eventLoop: EventLoopGroup) throws { //}-> EventLoopFuture<[Value]> { + private func dispatchQueueBatch(queue: LoaderQueue, on eventLoop: EventLoopGroup) throws { let keys = queue.map { $0.key } if keys.isEmpty { - return //eventLoop.next().newSucceededFuture(result: []) + return } // Step through the values, resolving or rejecting each Promise in the // loaded queue. _ = try batchLoadFunction(keys) - .thenThrowing { values in - if values.count != keys.count { - throw DataLoaderError.typeError("The function did not return an array of the same length as the array of keys. \nKeys count: \(keys.count)\nValues count: \(values.count)") - } + .flatMapThrowing { values in + if values.count != keys.count { + throw DataLoaderError.typeError("The function did not return an array of the same length as the array of keys. \nKeys count: \(keys.count)\nValues count: \(values.count)") + } - for entry in queue.enumerated() { - let result = values[entry.offset] + for entry in queue.enumerated() { + let result = values[entry.offset] - switch result { - case .failure(let error): entry.element.promise.fail(error: error) - case .success(let value): entry.element.promise.succeed(result: value) + switch result { + case .failure(let error): entry.element.promise.fail(error) + case .success(let value): entry.element.promise.succeed(value) + } } } - } - .mapIfError{ error in - self.failedDispatch(queue: queue, error: error) - } + .recover { error in + self.failedDispatch(queue: queue, error: error) + } } public func dispatchQueue(on eventLoop: EventLoopGroup) throws { @@ -163,7 +163,7 @@ final public class DataLoader { private func failedDispatch(queue: LoaderQueue, error: Error) { queue.forEach { (key, promise) in _ = clear(key: key) - promise.fail(error: error) + promise.fail(error) } } } diff --git a/Tests/SwiftDataLoaderTests/DataLoaderAbuseTests.swift b/Tests/SwiftDataLoaderTests/DataLoaderAbuseTests.swift index c2413ec..911e77b 100644 --- a/Tests/SwiftDataLoaderTests/DataLoaderAbuseTests.swift +++ b/Tests/SwiftDataLoaderTests/DataLoaderAbuseTests.swift @@ -20,7 +20,7 @@ class DataLoaderAbuseTests: XCTestCase { } let identityLoader = DataLoader(options: DataLoaderOptions(batchingEnabled: false)) { keys in - eventLoopGroup.next().newSucceededFuture(result: []) + eventLoopGroup.next().makeSucceededFuture([]) } let value = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -37,7 +37,7 @@ class DataLoaderAbuseTests: XCTestCase { } let identityLoader = DataLoader(options: DataLoaderOptions()) { keys in - eventLoopGroup.next().newSucceededFuture(result: []) + eventLoopGroup.next().makeSucceededFuture([]) } let value = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -64,7 +64,7 @@ class DataLoaderAbuseTests: XCTestCase { } } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -94,7 +94,7 @@ class DataLoaderAbuseTests: XCTestCase { } } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: 1, on: eventLoopGroup) diff --git a/Tests/SwiftDataLoaderTests/DataLoaderTests.swift b/Tests/SwiftDataLoaderTests/DataLoaderTests.swift index 1a0be9e..34ba047 100644 --- a/Tests/SwiftDataLoaderTests/DataLoaderTests.swift +++ b/Tests/SwiftDataLoaderTests/DataLoaderTests.swift @@ -16,7 +16,7 @@ final class DataLoaderTests: XCTestCase { let identityLoader = DataLoader(options: DataLoaderOptions(batchingEnabled: false)) { keys in let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -36,7 +36,7 @@ final class DataLoaderTests: XCTestCase { let identityLoader = DataLoader() { keys in let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let values = try identityLoader.loadMany(keys: [1, 2], on: eventLoopGroup) @@ -63,7 +63,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -90,7 +90,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -119,7 +119,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: 1, on: eventLoopGroup) @@ -146,7 +146,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: "A", on: eventLoopGroup) @@ -193,7 +193,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: "A", on: eventLoopGroup) @@ -230,7 +230,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } let value1 = try identityLoader.load(key: "A", on: eventLoopGroup) @@ -267,7 +267,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } _ = identityLoader.prime(key: "A", value: "A", on: eventLoopGroup) @@ -295,7 +295,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } _ = identityLoader.prime(key: "A", value: "X", on: eventLoopGroup) @@ -335,7 +335,7 @@ final class DataLoaderTests: XCTestCase { loadCalls.append(keys) let results = keys.map { DataLoaderFutureValue.success($0) } - return eventLoopGroup.next().newSucceededFuture(result: results) + return eventLoopGroup.next().makeSucceededFuture(results) } _ = identityLoader.prime(key: "A", value: "X", on: eventLoopGroup) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 159495e..232f76d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -8,10 +8,8 @@ jobs: strategy: maxParallel: 10 matrix: - swift420: - containerImage: norionomura/swift:42 - swift421: - containerImage: norionomura/swift:421 + swift500: + containerImage: apple/swift:5 container: $[ variables['containerImage'] ] steps: - script: swift test --parallel @@ -19,14 +17,12 @@ jobs: - job: Xcode pool: - vmImage: 'macOS 10.13' + vmImage: 'macOS 10.14' strategy: maxParallel: 10 matrix: - xcode10: - DEVELOPER_DIR: /Applications/Xcode_10.app - xcode101: - DEVELOPER_DIR: /Applications/Xcode_10.1.app + xcode102: + DEVELOPER_DIR: /Applications/Xcode_10.2.app steps: - script: swift package generate-xcodeproj displayName: Generate Xcode project file @@ -45,14 +41,12 @@ jobs: - job: SwiftPM pool: - vmImage: 'macOS 10.13' + vmImage: 'macOS 10.14' strategy: maxParallel: 10 matrix: - xcode10: - DEVELOPER_DIR: /Applications/Xcode_10.app xcode101: - DEVELOPER_DIR: /Applications/Xcode_10.1.app + DEVELOPER_DIR: /Applications/Xcode_10.2.app steps: - script: xcodebuild -version displayName: xcodebuild -version