diff --git a/Package.swift b/Package.swift index 962a3cee..ce0fad78 100644 --- a/Package.swift +++ b/Package.swift @@ -15,7 +15,7 @@ let package = Package( .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.30.0")), + .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.32.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")), .package(url: "https://github.com/swift-server/swift-backtrace.git", .upToNextMajor(from: "1.2.3")), ], @@ -29,6 +29,7 @@ let package = Package( .product(name: "Logging", package: "swift-log"), .product(name: "Backtrace", package: "swift-backtrace"), .product(name: "NIOHTTP1", package: "swift-nio"), + .product(name: "NIO", package: "swift-nio"), .product(name: "_NIOConcurrency", package: "swift-nio"), ]), .testTarget(name: "AWSLambdaRuntimeCoreTests", dependencies: [ @@ -51,6 +52,7 @@ let package = Package( // for perf testing .target(name: "MockServer", dependencies: [ .product(name: "NIOHTTP1", package: "swift-nio"), + .product(name: "NIO", package: "swift-nio"), ]), .target(name: "StringSample", dependencies: ["AWSLambdaRuntime"]), .target(name: "CodableSample", dependencies: ["AWSLambdaRuntime"]), diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift index a211b066..2c29f2a1 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift @@ -12,6 +12,7 @@ // //===----------------------------------------------------------------------===// +import _NIOConcurrency import Dispatch import NIO @@ -87,7 +88,7 @@ extension LambdaHandler { // MARK: - AsyncLambdaHandler -#if compiler(>=5.5) +#if compiler(>=5.5) && canImport(_Concurrency) /// Strongly typed, processing protocol for a Lambda that takes a user defined `In` and returns a user defined `Out` async. @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) public protocol AsyncLambdaHandler: EventLoopLambdaHandler { @@ -114,7 +115,7 @@ public protocol AsyncLambdaHandler: EventLoopLambdaHandler { extension AsyncLambdaHandler { public func handle(context: Lambda.Context, event: In) -> EventLoopFuture { let promise = context.eventLoop.makePromise(of: Out.self) - promise.completeWithAsync { + promise.completeWithTask { try await self.handle(event: event, context: context) } return promise.futureResult @@ -126,7 +127,7 @@ extension AsyncLambdaHandler { public static func main() { Lambda.run { context -> EventLoopFuture in let promise = context.eventLoop.makePromise(of: ByteBufferLambdaHandler.self) - promise.completeWithAsync { + promise.completeWithTask { try await Self(context: context) } return promise.futureResult diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift index 3406d52f..ce4c21f4 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift @@ -79,7 +79,7 @@ class LambdaHandlerTest: XCTestCase { assertLambdaLifecycleResult(result, shoudHaveRun: maxTimes) } - #if compiler(>=5.5) + #if compiler(>=5.5) && canImport(_Concurrency) // MARK: - AsyncLambdaHandler diff --git a/docker/docker-compose.al2.56.yaml b/docker/docker-compose.al2.56.yaml new file mode 100644 index 00000000..561ea804 --- /dev/null +++ b/docker/docker-compose.al2.56.yaml @@ -0,0 +1,18 @@ +version: "3" + +services: + + runtime-setup: + image: swift-aws-lambda:al2-5.6 + build: + args: + swift_version: "5.6" + + test: + image: swift-aws-lambda:al2-5.6 + + test-samples: + image: swift-aws-lambda:al2-5.6 + + shell: + image: swift-aws-lambda:al2-5.6 diff --git a/docker/docker-compose.al2.57.yaml b/docker/docker-compose.al2.57.yaml new file mode 100644 index 00000000..0e280837 --- /dev/null +++ b/docker/docker-compose.al2.57.yaml @@ -0,0 +1,18 @@ +version: "3" + +services: + + runtime-setup: + image: swift-aws-lambda:al2-5.7 + build: + args: + base_image: "swiftlang/swift:nightly-main-amazonlinux2" + + test: + image: swift-aws-lambda:al2-5.7 + + test-samples: + image: swift-aws-lambda:al2-5.7 + + shell: + image: swift-aws-lambda:al2-5.7