From 6d73f3e4e91e6c0b585bcc4c7473d519f13de7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 10:19:32 +0200 Subject: [PATCH 1/9] factor out the swift settings in package.swift --- Package.swift | 21 ++++++++++++++++++--- Package@swift-6.0.swift | 19 +++++++++---------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Package.swift b/Package.swift index a94ba22b..d7195f9b 100644 --- a/Package.swift +++ b/Package.swift @@ -2,6 +2,17 @@ import PackageDescription +let defaultSwiftSettings: [SwiftSetting] = + [ + .swiftLanguageMode(.v6), + // .enableExperimentalFeature( + // "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" + // ), + // + // then, in code, use + // @available(LambdaSwift 2.0, *) + ] + let package = Package( name: "swift-aws-lambda-runtime", platforms: [.macOS(.v15)], @@ -43,7 +54,8 @@ let package = Package( package: "swift-service-lifecycle", condition: .when(traits: ["ServiceLifecycleSupport"]) ), - ] + ], + swiftSettings: defaultSwiftSettings ), .plugin( name: "AWSLambdaPackager", @@ -67,8 +79,10 @@ let package = Package( .byName(name: "AWSLambdaRuntime"), .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] + ], + swiftSettings: defaultSwiftSettings ), + // for perf testing .executableTarget( name: "MockServer", @@ -77,7 +91,8 @@ let package = Package( .product(name: "NIOHTTP1", package: "swift-nio"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOPosix", package: "swift-nio"), - ] + ], + swiftSettings: defaultSwiftSettings ), ] ) diff --git a/Package@swift-6.0.swift b/Package@swift-6.0.swift index a10bb0b8..7b94c4db 100644 --- a/Package@swift-6.0.swift +++ b/Package@swift-6.0.swift @@ -2,6 +2,13 @@ import PackageDescription +let defaultSwiftSettings: [SwiftSetting] = [ + .define("FoundationJSONSupport"), + .define("ServiceLifecycleSupport"), + .define("LocalServerSupport"), + .swiftLanguageMode(.v6), +] + let package = Package( name: "swift-aws-lambda-runtime", platforms: [.macOS(.v15)], @@ -28,11 +35,7 @@ let package = Package( .product(name: "NIOPosix", package: "swift-nio"), .product(name: "ServiceLifecycle", package: "swift-service-lifecycle"), ], - swiftSettings: [ - .define("FoundationJSONSupport"), - .define("ServiceLifecycleSupport"), - .define("LocalServerSupport"), - ] + swiftSettings: defaultSwiftSettings ), .plugin( name: "AWSLambdaPackager", @@ -57,11 +60,7 @@ let package = Package( .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), ], - swiftSettings: [ - .define("FoundationJSONSupport"), - .define("ServiceLifecycleSupport"), - .define("LocalServerSupport"), - ] + swiftSettings: defaultSwiftSettings ), // for perf testing .executableTarget( From 66bf6a3dfba7a7ccdd57f6f8e56c75157a23694f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 10:28:36 +0200 Subject: [PATCH 2/9] swift-format --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index d7195f9b..66c5d258 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let defaultSwiftSettings: [SwiftSetting] = [ - .swiftLanguageMode(.v6), + .swiftLanguageMode(.v6) // .enableExperimentalFeature( // "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" // ), From 3879bdeae78ce95ae52db83721191c74d5ab7279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 13:49:33 +0200 Subject: [PATCH 3/9] remove `.platform` dependency on package --- Package.swift | 11 +++++------ .../AWSLambdaRuntime/ControlPlaneRequest.swift | 9 +++++++++ .../ControlPlaneRequestEncoder.swift | 3 +++ .../FoundationSupport/Context+Foundation.swift | 3 +++ .../FoundationSupport/Lambda+JSON.swift | 6 ++++++ Sources/AWSLambdaRuntime/Lambda+Codable.swift | 6 ++++++ .../AWSLambdaRuntime/Lambda+LocalServer.swift | 6 ++++++ Sources/AWSLambdaRuntime/Lambda.swift | 6 ++++++ Sources/AWSLambdaRuntime/LambdaClock.swift | 3 +++ Sources/AWSLambdaRuntime/LambdaContext.swift | 3 +++ Sources/AWSLambdaRuntime/LambdaHandlers.swift | 18 ++++++++++++++++++ .../LambdaResponseStreamWriter+Headers.swift | 3 +++ .../LambdaRuntime+ServiceLifecycle.swift | 3 +++ Sources/AWSLambdaRuntime/LambdaRuntime.swift | 6 ++++++ .../LambdaRuntimeClient+ChannelHandler.swift | 6 ++++++ .../AWSLambdaRuntime/LambdaRuntimeClient.swift | 6 ++++++ .../LambdaRuntimeClientProtocol.swift | 6 ++++++ Sources/AWSLambdaRuntime/Utils.swift | 3 +++ Sources/MockServer/MockHTTPServer.swift | 3 +++ .../CollectEverythingLogHandler.swift | 3 +++ .../ControlPlaneRequestEncoderTests.swift | 6 ++++++ .../InvocationTests.swift | 3 +++ .../Lambda+CodableTests.swift | 3 +++ .../LambdaClockTests.swift | 3 +++ .../LambdaContextTests.swift | 3 +++ ...mbdaResponseStreamWriter+HeadersTests.swift | 3 +++ .../LambdaRunLoopTests.swift | 3 +++ .../LambdaRuntime+ServiceLifeCycle.swift | 3 +++ .../LambdaRuntimeClientTests.swift | 3 +++ .../LambdaRuntimeTests.swift | 6 ++++++ .../MockLambdaClient.swift | 6 ++++++ .../MockLambdaServer.swift | 9 +++++++++ Tests/AWSLambdaRuntimeTests/PoolTests.swift | 3 +++ Tests/AWSLambdaRuntimeTests/UtilsTest.swift | 3 +++ 34 files changed, 164 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index 66c5d258..39f42e3b 100644 --- a/Package.swift +++ b/Package.swift @@ -4,18 +4,17 @@ import PackageDescription let defaultSwiftSettings: [SwiftSetting] = [ - .swiftLanguageMode(.v6) - // .enableExperimentalFeature( - // "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" - // ), - // + .swiftLanguageMode(.v6), + .enableExperimentalFeature( + "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" + ) + // then, in code, use // @available(LambdaSwift 2.0, *) ] let package = Package( name: "swift-aws-lambda-runtime", - platforms: [.macOS(.v15)], products: [ .library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]), // plugin to package the lambda, creating an archive that can be uploaded to AWS diff --git a/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift index 233d7aef..0907b846 100644 --- a/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift @@ -15,6 +15,9 @@ import NIOCore import NIOHTTP1 +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif enum ControlPlaneRequest: Hashable { case next case invocationResponse(String, ByteBuffer?) @@ -22,6 +25,9 @@ enum ControlPlaneRequest: Hashable { case initializationError(ErrorResponse) } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif enum ControlPlaneResponse: Hashable { case next(InvocationMetadata, ByteBuffer) case accepted @@ -29,6 +35,9 @@ enum ControlPlaneResponse: Hashable { } @usableFromInline +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif package struct InvocationMetadata: Hashable, Sendable { @usableFromInline package let requestID: String diff --git a/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift b/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift index 84f0cf0e..5dcaa6fd 100644 --- a/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift +++ b/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift @@ -14,6 +14,9 @@ import NIOCore +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct ControlPlaneRequestEncoder: _EmittingChannelHandler { typealias OutboundOut = ByteBuffer diff --git a/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift b/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift index fad7dcec..6f15c11a 100644 --- a/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift +++ b/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift @@ -19,6 +19,9 @@ import FoundationEssentials import struct Foundation.Date #endif +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaContext { /// Returns the deadline as a Date for the Lambda function execution. /// I'm not sure how usefull it is to have this as a Date, with only seconds precision, diff --git a/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift b/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift index 9b47bd7d..96a9ed9a 100644 --- a/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift +++ b/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift @@ -59,6 +59,9 @@ public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaCodableAdapter { /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. /// - Parameters: @@ -84,6 +87,9 @@ extension LambdaCodableAdapter { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaRuntime { /// Initialize an instance with a `LambdaHandler` defined in the form of a closure **with a non-`Void` return type**. /// - Parameters: diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index abc8728b..f067b37f 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -48,6 +48,9 @@ public struct VoidEncoder: LambdaOutputEncoder { } /// Adapts a ``LambdaHandler`` conforming handler to conform to ``LambdaWithBackgroundProcessingHandler``. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public struct LambdaHandlerAdapter< Event: Decodable, Output, @@ -80,6 +83,9 @@ public struct LambdaHandlerAdapter< } /// Adapts a ``LambdaWithBackgroundProcessingHandler`` conforming handler to conform to ``StreamingLambdaHandler``. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public struct LambdaCodableAdapter< Handler: LambdaWithBackgroundProcessingHandler, Event: Decodable, diff --git a/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift index 322bce1a..6e455018 100644 --- a/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift @@ -37,6 +37,9 @@ import Synchronization // ) // } // } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension Lambda { /// Execute code in the context of a mock Lambda server. /// @@ -84,6 +87,9 @@ extension Lambda { /// 1. POST /invoke - the client posts the event to the lambda function /// /// This server passes the data received from /invoke POST request to the lambda function (GET /next) and then forwards the response back to the client. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif internal struct LambdaHTTPServer { private let invocationEndpoint: String diff --git a/Sources/AWSLambdaRuntime/Lambda.swift b/Sources/AWSLambdaRuntime/Lambda.swift index f6223cb5..aa32e5be 100644 --- a/Sources/AWSLambdaRuntime/Lambda.swift +++ b/Sources/AWSLambdaRuntime/Lambda.swift @@ -29,6 +29,9 @@ import ucrt #error("Unsupported platform") #endif +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public enum Lambda { @inlinable package static func runLoop( @@ -98,6 +101,9 @@ public enum Lambda { // MARK: - Public API +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension Lambda { /// Utility to access/read environment variables public static func env(_ name: String) -> String? { diff --git a/Sources/AWSLambdaRuntime/LambdaClock.swift b/Sources/AWSLambdaRuntime/LambdaClock.swift index 53b641cc..03e51909 100644 --- a/Sources/AWSLambdaRuntime/LambdaClock.swift +++ b/Sources/AWSLambdaRuntime/LambdaClock.swift @@ -51,6 +51,9 @@ import ucrt /// The Lambda execution environment uses UTC as a timezone, /// `LambdaClock` operates in UTC and does not account for time zones. /// see: TZ in https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public struct LambdaClock: Clock { public typealias Duration = Swift.Duration diff --git a/Sources/AWSLambdaRuntime/LambdaContext.swift b/Sources/AWSLambdaRuntime/LambdaContext.swift index 0407f9e6..ea74ece7 100644 --- a/Sources/AWSLambdaRuntime/LambdaContext.swift +++ b/Sources/AWSLambdaRuntime/LambdaContext.swift @@ -83,6 +83,9 @@ public struct ClientContext: Codable, Sendable { /// Lambda runtime context. /// The Lambda runtime generates and passes the `LambdaContext` to the Lambda handler as an argument. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public struct LambdaContext: CustomDebugStringConvertible, Sendable { final class _Storage: Sendable { let requestID: String diff --git a/Sources/AWSLambdaRuntime/LambdaHandlers.swift b/Sources/AWSLambdaRuntime/LambdaHandlers.swift index f79c69b5..8f8104b1 100644 --- a/Sources/AWSLambdaRuntime/LambdaHandlers.swift +++ b/Sources/AWSLambdaRuntime/LambdaHandlers.swift @@ -21,6 +21,9 @@ import NIOCore /// Background work can also be executed after returning the response. After closing the response stream by calling /// ``LambdaResponseStreamWriter/finish()`` or ``LambdaResponseStreamWriter/writeAndFinish(_:)``, /// the ``handle(_:responseWriter:context:)`` function is free to execute any background work. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public protocol StreamingLambdaHandler: _Lambda_SendableMetatype { /// The handler function -- implement the business logic of the Lambda function here. /// - Parameters: @@ -66,6 +69,9 @@ public protocol LambdaResponseStreamWriter { /// /// - note: This handler protocol does not support response streaming because the output has to be encoded prior to it being sent, e.g. it is not possible to encode a partial/incomplete JSON string. /// This protocol also does not support the execution of background work after the response has been returned -- the ``LambdaWithBackgroundProcessingHandler`` protocol caters for such use-cases. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public protocol LambdaHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. @@ -88,6 +94,9 @@ public protocol LambdaHandler { /// ``LambdaResponseWriter``that is passed in as an argument, meaning that the /// ``LambdaWithBackgroundProcessingHandler/handle(_:outputWriter:context:)`` function is then /// free to implement any background work after the result has been sent to the AWS Lambda control plane. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public protocol LambdaWithBackgroundProcessingHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. @@ -123,6 +132,9 @@ public protocol LambdaResponseWriter { /// A ``StreamingLambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public struct StreamingClosureHandler: StreamingLambdaHandler { let body: @Sendable (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void @@ -151,6 +163,9 @@ public struct StreamingClosureHandler: StreamingLambdaHandler { /// A ``LambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public struct ClosureHandler: LambdaHandler { let body: (Event, LambdaContext) async throws -> Output @@ -175,6 +190,9 @@ public struct ClosureHandler: LambdaHandler { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaRuntime { /// Initialize an instance with a ``StreamingLambdaHandler`` in the form of a closure. /// - Parameter diff --git a/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift b/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift index 55ed3531..2e0cd5a1 100644 --- a/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift +++ b/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift @@ -87,6 +87,9 @@ extension LambdaResponseStreamWriter { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaResponseStreamWriter { /// Writes the HTTP status code and headers to the response stream. /// diff --git a/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift b/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift index 1b05b1c2..d13fd517 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift @@ -15,6 +15,9 @@ #if ServiceLifecycleSupport import ServiceLifecycle +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaRuntime: Service { public func run() async throws { try await cancelWhenGracefulShutdown { diff --git a/Sources/AWSLambdaRuntime/LambdaRuntime.swift b/Sources/AWSLambdaRuntime/LambdaRuntime.swift index a639ac31..4cf9274a 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntime.swift @@ -24,8 +24,14 @@ import Foundation // This is our guardian to ensure only one LambdaRuntime is running at the time // We use an Atomic here to ensure thread safety +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif private let _isRunning = Atomic(false) +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif public final class LambdaRuntime: Sendable where Handler: StreamingLambdaHandler { @usableFromInline /// we protect the handler behind a Mutex to ensure that we only ever have one copy of it diff --git a/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift b/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift index e69cb032..9abd2567 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift @@ -22,6 +22,9 @@ internal protocol LambdaChannelHandlerDelegate { func connectionErrorHappened(_ error: any Error, channel: any Channel) } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif internal final class LambdaChannelHandler { let nextInvocationPath = Consts.invocationURLPrefix + Consts.getNextInvocationURLSuffix @@ -359,6 +362,9 @@ internal final class LambdaChannelHandler=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaChannelHandler: ChannelInboundHandler { typealias OutboundIn = Never typealias InboundIn = NIOHTTPClientResponseFull diff --git a/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift index 50efc614..1752f1ec 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift @@ -17,6 +17,9 @@ import NIOCore import NIOHTTP1 import NIOPosix +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif @usableFromInline final actor LambdaRuntimeClient: LambdaRuntimeClientProtocol { @usableFromInline @@ -404,6 +407,9 @@ final actor LambdaRuntimeClient: LambdaRuntimeClientProtocol { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension LambdaRuntimeClient: LambdaChannelHandlerDelegate { nonisolated func connectionErrorHappened(_ error: any Error, channel: any Channel) {} diff --git a/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift b/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift index 61ca1b33..c9ce8129 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift @@ -23,6 +23,9 @@ package protocol LambdaRuntimeClientResponseStreamWriter: LambdaResponseStreamWr } @usableFromInline +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif package protocol LambdaRuntimeClientProtocol { associatedtype Writer: LambdaRuntimeClientResponseStreamWriter @@ -30,6 +33,9 @@ package protocol LambdaRuntimeClientProtocol { } @usableFromInline +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif package struct Invocation: Sendable { @usableFromInline package var metadata: InvocationMetadata diff --git a/Sources/AWSLambdaRuntime/Utils.swift b/Sources/AWSLambdaRuntime/Utils.swift index 8ab544c8..13ba8a8d 100644 --- a/Sources/AWSLambdaRuntime/Utils.swift +++ b/Sources/AWSLambdaRuntime/Utils.swift @@ -72,6 +72,9 @@ extension String { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif extension AmazonHeaders { /// Generates (X-Ray) trace ID. /// # Trace ID Format diff --git a/Sources/MockServer/MockHTTPServer.swift b/Sources/MockServer/MockHTTPServer.swift index 7405b5bd..1cbdba68 100644 --- a/Sources/MockServer/MockHTTPServer.swift +++ b/Sources/MockServer/MockHTTPServer.swift @@ -26,6 +26,9 @@ import Foundation #endif @main +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct HttpServer { /// The server's host. (default: 127.0.0.1) private let host: String diff --git a/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift b/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift index 537847d8..2c3da251 100644 --- a/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift +++ b/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift @@ -16,6 +16,9 @@ import Logging import Synchronization import Testing +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct CollectEverythingLogHandler: LogHandler { var metadata: Logger.Metadata = [:] var logLevel: Logger.Level = .info diff --git a/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift b/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift index b1c22a58..081ab96d 100644 --- a/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift +++ b/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift @@ -25,6 +25,9 @@ import FoundationEssentials import Foundation #endif +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct ControlPlaneRequestEncoderTests { let host = "192.168.0.1" @@ -196,6 +199,9 @@ struct ControlPlaneRequestEncoderTests { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif private final class ControlPlaneRequestEncoderHandler: ChannelOutboundHandler { typealias OutboundIn = ControlPlaneRequest typealias OutboundOut = ByteBuffer diff --git a/Tests/AWSLambdaRuntimeTests/InvocationTests.swift b/Tests/AWSLambdaRuntimeTests/InvocationTests.swift index ea4eef1f..485ed4cc 100644 --- a/Tests/AWSLambdaRuntimeTests/InvocationTests.swift +++ b/Tests/AWSLambdaRuntimeTests/InvocationTests.swift @@ -24,6 +24,9 @@ import Foundation #endif @Suite +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct InvocationTest { @Test func testInvocationTraceID() throws { diff --git a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift index 8a78ee8a..2b9e5bf6 100644 --- a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift +++ b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift @@ -24,6 +24,9 @@ import Foundation #endif @Suite +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct JSONTests { let logger = Logger(label: "JSONTests") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift index b1d6f974..ad5c8df8 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift @@ -23,6 +23,9 @@ import Foundation #endif @Suite("LambdaClock Tests") +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaClockTests { @Test("Clock provides current time") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift index 827105da..0ebd5595 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift @@ -19,6 +19,9 @@ import Testing @testable import AWSLambdaRuntime @Suite("LambdaContext ClientContext Tests") +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaContextTests { @Test("ClientContext with full data resolves correctly") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift index 7fc679fd..c83fe410 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift @@ -24,6 +24,9 @@ import Foundation #endif @Suite("LambdaResponseStreamWriter+Headers Tests") +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaResponseStreamWriterHeadersTests { @Test("Write status and headers with minimal response (status code only)") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift index ec1c9265..f9298a21 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift @@ -25,6 +25,9 @@ import Foundation #endif @Suite +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaRunLoopTests { struct MockEchoHandler: StreamingLambdaHandler { func handle( diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift index 7103ea8d..d3da7741 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift @@ -19,6 +19,9 @@ import Testing import Logging @Suite +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaRuntimeServiceLifecycleTests { @Test func testLambdaRuntimeGracefulShutdown() async throws { diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift index f10026f9..16f9bcf1 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift @@ -23,6 +23,9 @@ import struct Foundation.UUID @testable import AWSLambdaRuntime @Suite +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaRuntimeClientTests { let logger = { diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift index 6c159dc8..2e7edfc4 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift @@ -21,6 +21,9 @@ import Testing @testable import AWSLambdaRuntime @Suite("LambdaRuntimeTests") +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct LambdaRuntimeTests { @Test("LambdaRuntime can only be run once") @@ -116,6 +119,9 @@ struct LambdaRuntimeTests { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct MockHandler: StreamingLambdaHandler { mutating func handle( _ event: NIOCore.ByteBuffer, diff --git a/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift b/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift index bdc0ab7a..f1e91dc8 100644 --- a/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift +++ b/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift @@ -22,6 +22,9 @@ import FoundationEssentials import Foundation #endif +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct MockLambdaWriter: LambdaRuntimeClientResponseStreamWriter { var underlying: MockLambdaClient @@ -55,6 +58,9 @@ enum LambdaError: Error, Equatable { case handlerError } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif final actor MockLambdaClient: LambdaRuntimeClientProtocol { typealias Writer = MockLambdaWriter diff --git a/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift index d5ad8876..d6cc2520 100644 --- a/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift @@ -25,6 +25,9 @@ import FoundationEssentials import Foundation #endif +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif func withMockServer( behaviour: some LambdaServerBehavior, port: Int = 0, @@ -46,6 +49,9 @@ func withMockServer( return try result.get() } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") private let behavior: Behavior @@ -113,6 +119,9 @@ final class MockLambdaServer { } } +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif final class HTTPHandler: ChannelInboundHandler { typealias InboundIn = HTTPServerRequestPart typealias OutboundOut = HTTPServerResponsePart diff --git a/Tests/AWSLambdaRuntimeTests/PoolTests.swift b/Tests/AWSLambdaRuntimeTests/PoolTests.swift index 15d54a73..04ef8b9e 100644 --- a/Tests/AWSLambdaRuntimeTests/PoolTests.swift +++ b/Tests/AWSLambdaRuntimeTests/PoolTests.swift @@ -16,6 +16,9 @@ import Testing @testable import AWSLambdaRuntime +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct PoolTests { @Test diff --git a/Tests/AWSLambdaRuntimeTests/UtilsTest.swift b/Tests/AWSLambdaRuntimeTests/UtilsTest.swift index 15a5fd27..714b6acd 100644 --- a/Tests/AWSLambdaRuntimeTests/UtilsTest.swift +++ b/Tests/AWSLambdaRuntimeTests/UtilsTest.swift @@ -16,6 +16,9 @@ import Testing @testable import AWSLambdaRuntime +#if swift(>=6.1) +@available(LambdaSwift 2.0, *) +#endif struct UtilsTest { @Test func testGenerateXRayTraceID() { From 90ec542997ef6b1db20a3b4c6437f11430d54c08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 14:03:08 +0200 Subject: [PATCH 4/9] swift format --- Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 39f42e3b..43b5d2d7 100644 --- a/Package.swift +++ b/Package.swift @@ -7,8 +7,8 @@ let defaultSwiftSettings: [SwiftSetting] = .swiftLanguageMode(.v6), .enableExperimentalFeature( "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" - ) - + ), + // then, in code, use // @available(LambdaSwift 2.0, *) ] From d5670c356d48e985933241a02f0b5752e583f65d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 15:23:25 +0200 Subject: [PATCH 5/9] remove Swift 6 language mode --- Package.swift | 1 - Package@swift-6.0.swift | 8 +++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index 43b5d2d7..00af7fd7 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,6 @@ import PackageDescription let defaultSwiftSettings: [SwiftSetting] = [ - .swiftLanguageMode(.v6), .enableExperimentalFeature( "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" ), diff --git a/Package@swift-6.0.swift b/Package@swift-6.0.swift index 7b94c4db..21a79764 100644 --- a/Package@swift-6.0.swift +++ b/Package@swift-6.0.swift @@ -6,12 +6,13 @@ let defaultSwiftSettings: [SwiftSetting] = [ .define("FoundationJSONSupport"), .define("ServiceLifecycleSupport"), .define("LocalServerSupport"), - .swiftLanguageMode(.v6), + .enableExperimentalFeature( + "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" + ), ] let package = Package( name: "swift-aws-lambda-runtime", - platforms: [.macOS(.v15)], products: [ .library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]), // plugin to package the lambda, creating an archive that can be uploaded to AWS @@ -70,7 +71,8 @@ let package = Package( .product(name: "NIOHTTP1", package: "swift-nio"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOPosix", package: "swift-nio"), - ] + ], + swiftSettings: defaultSwiftSettings ), ] ) From 41983128e6a3ed561858723b248f79d616238406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 15:23:47 +0200 Subject: [PATCH 6/9] remove #if swift(>=6.1) --- Sources/AWSLambdaRuntime/ControlPlaneRequest.swift | 6 ------ .../ControlPlaneRequestEncoder.swift | 2 -- .../FoundationSupport/Context+Foundation.swift | 2 -- .../FoundationSupport/Lambda+JSON.swift | 4 ---- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 4 ---- Sources/AWSLambdaRuntime/Lambda+LocalServer.swift | 4 ---- Sources/AWSLambdaRuntime/Lambda.swift | 4 ---- Sources/AWSLambdaRuntime/LambdaClock.swift | 2 -- Sources/AWSLambdaRuntime/LambdaContext.swift | 2 -- Sources/AWSLambdaRuntime/LambdaHandlers.swift | 12 ------------ .../LambdaResponseStreamWriter+Headers.swift | 2 -- .../LambdaRuntime+ServiceLifecycle.swift | 2 -- Sources/AWSLambdaRuntime/LambdaRuntime.swift | 4 ---- .../LambdaRuntimeClient+ChannelHandler.swift | 4 ---- Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift | 4 ---- .../LambdaRuntimeClientProtocol.swift | 4 ---- Sources/AWSLambdaRuntime/Utils.swift | 2 -- Sources/MockServer/MockHTTPServer.swift | 4 +--- .../CollectEverythingLogHandler.swift | 2 -- .../ControlPlaneRequestEncoderTests.swift | 4 ---- Tests/AWSLambdaRuntimeTests/InvocationTests.swift | 2 -- .../AWSLambdaRuntimeTests/Lambda+CodableTests.swift | 2 -- Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift | 2 -- Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift | 2 -- .../LambdaResponseStreamWriter+HeadersTests.swift | 2 -- Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift | 2 -- .../LambdaRuntime+ServiceLifeCycle.swift | 2 -- .../LambdaRuntimeClientTests.swift | 2 -- Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift | 4 ---- Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift | 4 ---- Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift | 6 ------ Tests/AWSLambdaRuntimeTests/PoolTests.swift | 2 -- Tests/AWSLambdaRuntimeTests/UtilsTest.swift | 2 -- 33 files changed, 1 insertion(+), 107 deletions(-) diff --git a/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift index 0907b846..9fa933f1 100644 --- a/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntime/ControlPlaneRequest.swift @@ -15,9 +15,7 @@ import NIOCore import NIOHTTP1 -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif enum ControlPlaneRequest: Hashable { case next case invocationResponse(String, ByteBuffer?) @@ -25,9 +23,7 @@ enum ControlPlaneRequest: Hashable { case initializationError(ErrorResponse) } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif enum ControlPlaneResponse: Hashable { case next(InvocationMetadata, ByteBuffer) case accepted @@ -35,9 +31,7 @@ enum ControlPlaneResponse: Hashable { } @usableFromInline -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif package struct InvocationMetadata: Hashable, Sendable { @usableFromInline package let requestID: String diff --git a/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift b/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift index 5dcaa6fd..6934b064 100644 --- a/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift +++ b/Sources/AWSLambdaRuntime/ControlPlaneRequestEncoder.swift @@ -14,9 +14,7 @@ import NIOCore -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct ControlPlaneRequestEncoder: _EmittingChannelHandler { typealias OutboundOut = ByteBuffer diff --git a/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift b/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift index 6f15c11a..1dd6584c 100644 --- a/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift +++ b/Sources/AWSLambdaRuntime/FoundationSupport/Context+Foundation.swift @@ -19,9 +19,7 @@ import FoundationEssentials import struct Foundation.Date #endif -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaContext { /// Returns the deadline as a Date for the Lambda function execution. /// I'm not sure how usefull it is to have this as a Date, with only seconds precision, diff --git a/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift b/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift index 96a9ed9a..4d74d48e 100644 --- a/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift +++ b/Sources/AWSLambdaRuntime/FoundationSupport/Lambda+JSON.swift @@ -59,9 +59,7 @@ public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaCodableAdapter { /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. /// - Parameters: @@ -87,9 +85,7 @@ extension LambdaCodableAdapter { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaRuntime { /// Initialize an instance with a `LambdaHandler` defined in the form of a closure **with a non-`Void` return type**. /// - Parameters: diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index f067b37f..bf88b67c 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -48,9 +48,7 @@ public struct VoidEncoder: LambdaOutputEncoder { } /// Adapts a ``LambdaHandler`` conforming handler to conform to ``LambdaWithBackgroundProcessingHandler``. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public struct LambdaHandlerAdapter< Event: Decodable, Output, @@ -83,9 +81,7 @@ public struct LambdaHandlerAdapter< } /// Adapts a ``LambdaWithBackgroundProcessingHandler`` conforming handler to conform to ``StreamingLambdaHandler``. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public struct LambdaCodableAdapter< Handler: LambdaWithBackgroundProcessingHandler, Event: Decodable, diff --git a/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift index 6e455018..45468c97 100644 --- a/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntime/Lambda+LocalServer.swift @@ -37,9 +37,7 @@ import Synchronization // ) // } // } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension Lambda { /// Execute code in the context of a mock Lambda server. /// @@ -87,9 +85,7 @@ extension Lambda { /// 1. POST /invoke - the client posts the event to the lambda function /// /// This server passes the data received from /invoke POST request to the lambda function (GET /next) and then forwards the response back to the client. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif internal struct LambdaHTTPServer { private let invocationEndpoint: String diff --git a/Sources/AWSLambdaRuntime/Lambda.swift b/Sources/AWSLambdaRuntime/Lambda.swift index aa32e5be..d53efade 100644 --- a/Sources/AWSLambdaRuntime/Lambda.swift +++ b/Sources/AWSLambdaRuntime/Lambda.swift @@ -29,9 +29,7 @@ import ucrt #error("Unsupported platform") #endif -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public enum Lambda { @inlinable package static func runLoop( @@ -101,9 +99,7 @@ public enum Lambda { // MARK: - Public API -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension Lambda { /// Utility to access/read environment variables public static func env(_ name: String) -> String? { diff --git a/Sources/AWSLambdaRuntime/LambdaClock.swift b/Sources/AWSLambdaRuntime/LambdaClock.swift index 03e51909..5fe65e75 100644 --- a/Sources/AWSLambdaRuntime/LambdaClock.swift +++ b/Sources/AWSLambdaRuntime/LambdaClock.swift @@ -51,9 +51,7 @@ import ucrt /// The Lambda execution environment uses UTC as a timezone, /// `LambdaClock` operates in UTC and does not account for time zones. /// see: TZ in https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public struct LambdaClock: Clock { public typealias Duration = Swift.Duration diff --git a/Sources/AWSLambdaRuntime/LambdaContext.swift b/Sources/AWSLambdaRuntime/LambdaContext.swift index ea74ece7..df0166d2 100644 --- a/Sources/AWSLambdaRuntime/LambdaContext.swift +++ b/Sources/AWSLambdaRuntime/LambdaContext.swift @@ -83,9 +83,7 @@ public struct ClientContext: Codable, Sendable { /// Lambda runtime context. /// The Lambda runtime generates and passes the `LambdaContext` to the Lambda handler as an argument. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public struct LambdaContext: CustomDebugStringConvertible, Sendable { final class _Storage: Sendable { let requestID: String diff --git a/Sources/AWSLambdaRuntime/LambdaHandlers.swift b/Sources/AWSLambdaRuntime/LambdaHandlers.swift index 8f8104b1..4b42d0d7 100644 --- a/Sources/AWSLambdaRuntime/LambdaHandlers.swift +++ b/Sources/AWSLambdaRuntime/LambdaHandlers.swift @@ -21,9 +21,7 @@ import NIOCore /// Background work can also be executed after returning the response. After closing the response stream by calling /// ``LambdaResponseStreamWriter/finish()`` or ``LambdaResponseStreamWriter/writeAndFinish(_:)``, /// the ``handle(_:responseWriter:context:)`` function is free to execute any background work. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public protocol StreamingLambdaHandler: _Lambda_SendableMetatype { /// The handler function -- implement the business logic of the Lambda function here. /// - Parameters: @@ -69,9 +67,7 @@ public protocol LambdaResponseStreamWriter { /// /// - note: This handler protocol does not support response streaming because the output has to be encoded prior to it being sent, e.g. it is not possible to encode a partial/incomplete JSON string. /// This protocol also does not support the execution of background work after the response has been returned -- the ``LambdaWithBackgroundProcessingHandler`` protocol caters for such use-cases. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public protocol LambdaHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. @@ -94,9 +90,7 @@ public protocol LambdaHandler { /// ``LambdaResponseWriter``that is passed in as an argument, meaning that the /// ``LambdaWithBackgroundProcessingHandler/handle(_:outputWriter:context:)`` function is then /// free to implement any background work after the result has been sent to the AWS Lambda control plane. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public protocol LambdaWithBackgroundProcessingHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. @@ -132,9 +126,7 @@ public protocol LambdaResponseWriter { /// A ``StreamingLambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public struct StreamingClosureHandler: StreamingLambdaHandler { let body: @Sendable (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void @@ -163,9 +155,7 @@ public struct StreamingClosureHandler: StreamingLambdaHandler { /// A ``LambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public struct ClosureHandler: LambdaHandler { let body: (Event, LambdaContext) async throws -> Output @@ -190,9 +180,7 @@ public struct ClosureHandler: LambdaHandler { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaRuntime { /// Initialize an instance with a ``StreamingLambdaHandler`` in the form of a closure. /// - Parameter diff --git a/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift b/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift index 2e0cd5a1..b1796fcd 100644 --- a/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift +++ b/Sources/AWSLambdaRuntime/LambdaResponseStreamWriter+Headers.swift @@ -87,9 +87,7 @@ extension LambdaResponseStreamWriter { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaResponseStreamWriter { /// Writes the HTTP status code and headers to the response stream. /// diff --git a/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift b/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift index d13fd517..7489e8a3 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntime+ServiceLifecycle.swift @@ -15,9 +15,7 @@ #if ServiceLifecycleSupport import ServiceLifecycle -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaRuntime: Service { public func run() async throws { try await cancelWhenGracefulShutdown { diff --git a/Sources/AWSLambdaRuntime/LambdaRuntime.swift b/Sources/AWSLambdaRuntime/LambdaRuntime.swift index 4cf9274a..906b1f1b 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntime.swift @@ -24,14 +24,10 @@ import Foundation // This is our guardian to ensure only one LambdaRuntime is running at the time // We use an Atomic here to ensure thread safety -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif private let _isRunning = Atomic(false) -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif public final class LambdaRuntime: Sendable where Handler: StreamingLambdaHandler { @usableFromInline /// we protect the handler behind a Mutex to ensure that we only ever have one copy of it diff --git a/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift b/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift index 9abd2567..2b66ee87 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntimeClient+ChannelHandler.swift @@ -22,9 +22,7 @@ internal protocol LambdaChannelHandlerDelegate { func connectionErrorHappened(_ error: any Error, channel: any Channel) } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif internal final class LambdaChannelHandler { let nextInvocationPath = Consts.invocationURLPrefix + Consts.getNextInvocationURLSuffix @@ -362,9 +360,7 @@ internal final class LambdaChannelHandler=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaChannelHandler: ChannelInboundHandler { typealias OutboundIn = Never typealias InboundIn = NIOHTTPClientResponseFull diff --git a/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift index 1752f1ec..b7a5a0a4 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntimeClient.swift @@ -17,9 +17,7 @@ import NIOCore import NIOHTTP1 import NIOPosix -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif @usableFromInline final actor LambdaRuntimeClient: LambdaRuntimeClientProtocol { @usableFromInline @@ -407,9 +405,7 @@ final actor LambdaRuntimeClient: LambdaRuntimeClientProtocol { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension LambdaRuntimeClient: LambdaChannelHandlerDelegate { nonisolated func connectionErrorHappened(_ error: any Error, channel: any Channel) {} diff --git a/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift b/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift index c9ce8129..409fa8a0 100644 --- a/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift +++ b/Sources/AWSLambdaRuntime/LambdaRuntimeClientProtocol.swift @@ -23,9 +23,7 @@ package protocol LambdaRuntimeClientResponseStreamWriter: LambdaResponseStreamWr } @usableFromInline -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif package protocol LambdaRuntimeClientProtocol { associatedtype Writer: LambdaRuntimeClientResponseStreamWriter @@ -33,9 +31,7 @@ package protocol LambdaRuntimeClientProtocol { } @usableFromInline -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif package struct Invocation: Sendable { @usableFromInline package var metadata: InvocationMetadata diff --git a/Sources/AWSLambdaRuntime/Utils.swift b/Sources/AWSLambdaRuntime/Utils.swift index 13ba8a8d..f38e25c6 100644 --- a/Sources/AWSLambdaRuntime/Utils.swift +++ b/Sources/AWSLambdaRuntime/Utils.swift @@ -72,9 +72,7 @@ extension String { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif extension AmazonHeaders { /// Generates (X-Ray) trace ID. /// # Trace ID Format diff --git a/Sources/MockServer/MockHTTPServer.swift b/Sources/MockServer/MockHTTPServer.swift index 1cbdba68..ad69b216 100644 --- a/Sources/MockServer/MockHTTPServer.swift +++ b/Sources/MockServer/MockHTTPServer.swift @@ -25,10 +25,8 @@ import FoundationEssentials import Foundation #endif -@main -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif +@main struct HttpServer { /// The server's host. (default: 127.0.0.1) private let host: String diff --git a/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift b/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift index 2c3da251..98004b6a 100644 --- a/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift +++ b/Tests/AWSLambdaRuntimeTests/CollectEverythingLogHandler.swift @@ -16,9 +16,7 @@ import Logging import Synchronization import Testing -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct CollectEverythingLogHandler: LogHandler { var metadata: Logger.Metadata = [:] var logLevel: Logger.Level = .info diff --git a/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift b/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift index 081ab96d..6d24905d 100644 --- a/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift +++ b/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift @@ -25,9 +25,7 @@ import FoundationEssentials import Foundation #endif -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct ControlPlaneRequestEncoderTests { let host = "192.168.0.1" @@ -199,9 +197,7 @@ struct ControlPlaneRequestEncoderTests { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif private final class ControlPlaneRequestEncoderHandler: ChannelOutboundHandler { typealias OutboundIn = ControlPlaneRequest typealias OutboundOut = ByteBuffer diff --git a/Tests/AWSLambdaRuntimeTests/InvocationTests.swift b/Tests/AWSLambdaRuntimeTests/InvocationTests.swift index 485ed4cc..73804adf 100644 --- a/Tests/AWSLambdaRuntimeTests/InvocationTests.swift +++ b/Tests/AWSLambdaRuntimeTests/InvocationTests.swift @@ -24,9 +24,7 @@ import Foundation #endif @Suite -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct InvocationTest { @Test func testInvocationTraceID() throws { diff --git a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift index 2b9e5bf6..8c10aba3 100644 --- a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift +++ b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift @@ -24,9 +24,7 @@ import Foundation #endif @Suite -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct JSONTests { let logger = Logger(label: "JSONTests") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift index ad5c8df8..28267c9f 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift @@ -23,9 +23,7 @@ import Foundation #endif @Suite("LambdaClock Tests") -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaClockTests { @Test("Clock provides current time") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift index 0ebd5595..98023eae 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift @@ -19,9 +19,7 @@ import Testing @testable import AWSLambdaRuntime @Suite("LambdaContext ClientContext Tests") -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaContextTests { @Test("ClientContext with full data resolves correctly") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift index c83fe410..f44013f3 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift @@ -24,9 +24,7 @@ import Foundation #endif @Suite("LambdaResponseStreamWriter+Headers Tests") -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaResponseStreamWriterHeadersTests { @Test("Write status and headers with minimal response (status code only)") diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift index f9298a21..3a87dc8d 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift @@ -25,9 +25,7 @@ import Foundation #endif @Suite -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaRunLoopTests { struct MockEchoHandler: StreamingLambdaHandler { func handle( diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift index d3da7741..65029199 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift @@ -19,9 +19,7 @@ import Testing import Logging @Suite -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaRuntimeServiceLifecycleTests { @Test func testLambdaRuntimeGracefulShutdown() async throws { diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift index 16f9bcf1..3e18b217 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift @@ -23,9 +23,7 @@ import struct Foundation.UUID @testable import AWSLambdaRuntime @Suite -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaRuntimeClientTests { let logger = { diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift index 2e7edfc4..ea995a5b 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift @@ -21,9 +21,7 @@ import Testing @testable import AWSLambdaRuntime @Suite("LambdaRuntimeTests") -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct LambdaRuntimeTests { @Test("LambdaRuntime can only be run once") @@ -119,9 +117,7 @@ struct LambdaRuntimeTests { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct MockHandler: StreamingLambdaHandler { mutating func handle( _ event: NIOCore.ByteBuffer, diff --git a/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift b/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift index f1e91dc8..b271e51f 100644 --- a/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift +++ b/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift @@ -22,9 +22,7 @@ import FoundationEssentials import Foundation #endif -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct MockLambdaWriter: LambdaRuntimeClientResponseStreamWriter { var underlying: MockLambdaClient @@ -58,9 +56,7 @@ enum LambdaError: Error, Equatable { case handlerError } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif final actor MockLambdaClient: LambdaRuntimeClientProtocol { typealias Writer = MockLambdaWriter diff --git a/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift index d6cc2520..a2b5ebe5 100644 --- a/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift @@ -25,9 +25,7 @@ import FoundationEssentials import Foundation #endif -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif func withMockServer( behaviour: some LambdaServerBehavior, port: Int = 0, @@ -49,9 +47,7 @@ func withMockServer( return try result.get() } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") private let behavior: Behavior @@ -119,9 +115,7 @@ final class MockLambdaServer { } } -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif final class HTTPHandler: ChannelInboundHandler { typealias InboundIn = HTTPServerRequestPart typealias OutboundOut = HTTPServerResponsePart diff --git a/Tests/AWSLambdaRuntimeTests/PoolTests.swift b/Tests/AWSLambdaRuntimeTests/PoolTests.swift index 04ef8b9e..05a1402b 100644 --- a/Tests/AWSLambdaRuntimeTests/PoolTests.swift +++ b/Tests/AWSLambdaRuntimeTests/PoolTests.swift @@ -16,9 +16,7 @@ import Testing @testable import AWSLambdaRuntime -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct PoolTests { @Test diff --git a/Tests/AWSLambdaRuntimeTests/UtilsTest.swift b/Tests/AWSLambdaRuntimeTests/UtilsTest.swift index 714b6acd..5bbaf32d 100644 --- a/Tests/AWSLambdaRuntimeTests/UtilsTest.swift +++ b/Tests/AWSLambdaRuntimeTests/UtilsTest.swift @@ -16,9 +16,7 @@ import Testing @testable import AWSLambdaRuntime -#if swift(>=6.1) @available(LambdaSwift 2.0, *) -#endif struct UtilsTest { @Test func testGenerateXRayTraceID() { From 61b1ae813591ca5e2ed2743f3e9b67bea996bee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 15:28:51 +0200 Subject: [PATCH 7/9] swift format --- Package.swift | 5 +---- Package@swift-6.0.swift | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Package.swift b/Package.swift index 00af7fd7..a3c747eb 100644 --- a/Package.swift +++ b/Package.swift @@ -6,10 +6,7 @@ let defaultSwiftSettings: [SwiftSetting] = [ .enableExperimentalFeature( "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" - ), - - // then, in code, use - // @available(LambdaSwift 2.0, *) + ) ] let package = Package( diff --git a/Package@swift-6.0.swift b/Package@swift-6.0.swift index 21a79764..95e8c881 100644 --- a/Package@swift-6.0.swift +++ b/Package@swift-6.0.swift @@ -8,7 +8,7 @@ let defaultSwiftSettings: [SwiftSetting] = [ .define("LocalServerSupport"), .enableExperimentalFeature( "AvailabilityMacro=LambdaSwift 2.0:macOS 15.0" - ), + ), ] let package = Package( From cb2875a1c06d3ff0c2e12db4dc423e806b8b4f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 15:47:16 +0200 Subject: [PATCH 8/9] update tests --- .../ControlPlaneRequestEncoderTests.swift | 9 +++++- .../InvocationTests.swift | 2 +- .../Lambda+CodableTests.swift | 2 +- .../LambdaClockTests.swift | 11 ++++++- .../LambdaContextTests.swift | 2 +- ...bdaResponseStreamWriter+HeadersTests.swift | 18 ++++++++++- .../LambdaRunLoopTests.swift | 31 +++++++++++-------- .../LambdaRuntime+ServiceLifeCycle.swift | 2 +- .../LambdaRuntimeClientTests.swift | 6 +++- .../LambdaRuntimeTests.swift | 3 +- .../MockLambdaClient.swift | 6 ++++ .../MockLambdaServer.swift | 11 ++++--- Tests/AWSLambdaRuntimeTests/PoolTests.swift | 6 +++- Tests/AWSLambdaRuntimeTests/UtilsTest.swift | 2 +- 14 files changed, 83 insertions(+), 28 deletions(-) diff --git a/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift b/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift index 6d24905d..c050ae5e 100644 --- a/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift +++ b/Tests/AWSLambdaRuntimeTests/ControlPlaneRequestEncoderTests.swift @@ -25,10 +25,10 @@ import FoundationEssentials import Foundation #endif -@available(LambdaSwift 2.0, *) struct ControlPlaneRequestEncoderTests { let host = "192.168.0.1" + @available(LambdaSwift 2.0, *) func createChannels() -> (client: EmbeddedChannel, server: EmbeddedChannel) { let client = EmbeddedChannel(handler: ControlPlaneRequestEncoderHandler(host: self.host)) let server = EmbeddedChannel(handlers: [ @@ -39,6 +39,7 @@ struct ControlPlaneRequestEncoderTests { } @Test + @available(LambdaSwift 2.0, *) func testNextRequest() throws { let (client, server) = createChannels() defer { @@ -59,6 +60,7 @@ struct ControlPlaneRequestEncoderTests { } @Test + @available(LambdaSwift 2.0, *) func testPostInvocationSuccessWithoutBody() throws { let (client, server) = createChannels() defer { @@ -81,6 +83,7 @@ struct ControlPlaneRequestEncoderTests { } @Test + @available(LambdaSwift 2.0, *) func testPostInvocationSuccessWithBody() throws { let (client, server) = createChannels() defer { @@ -106,6 +109,7 @@ struct ControlPlaneRequestEncoderTests { } @Test + @available(LambdaSwift 2.0, *) func testPostInvocationErrorWithBody() throws { let (client, server) = createChannels() defer { @@ -134,6 +138,7 @@ struct ControlPlaneRequestEncoderTests { } @Test + @available(LambdaSwift 2.0, *) func testPostStartupError() throws { let (client, server) = createChannels() defer { @@ -160,6 +165,7 @@ struct ControlPlaneRequestEncoderTests { } @Test + @available(LambdaSwift 2.0, *) func testMultipleNextAndResponseSuccessRequests() throws { let (client, server) = createChannels() defer { @@ -184,6 +190,7 @@ struct ControlPlaneRequestEncoderTests { } } + @available(LambdaSwift 2.0, *) func sendRequest( _ request: ControlPlaneRequest, client: EmbeddedChannel, diff --git a/Tests/AWSLambdaRuntimeTests/InvocationTests.swift b/Tests/AWSLambdaRuntimeTests/InvocationTests.swift index 73804adf..6d1d7afa 100644 --- a/Tests/AWSLambdaRuntimeTests/InvocationTests.swift +++ b/Tests/AWSLambdaRuntimeTests/InvocationTests.swift @@ -24,9 +24,9 @@ import Foundation #endif @Suite -@available(LambdaSwift 2.0, *) struct InvocationTest { @Test + @available(LambdaSwift 2.0, *) func testInvocationTraceID() throws { let headers = HTTPHeaders([ (AmazonHeaders.requestID, "test"), diff --git a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift index 8c10aba3..2027616b 100644 --- a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift +++ b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTests.swift @@ -24,7 +24,6 @@ import Foundation #endif @Suite -@available(LambdaSwift 2.0, *) struct JSONTests { let logger = Logger(label: "JSONTests") @@ -47,6 +46,7 @@ struct JSONTests { } @Test + @available(LambdaSwift 2.0, *) func testJSONHandlerWithOutput() async { let jsonEncoder = JSONEncoder() let jsonDecoder = JSONDecoder() diff --git a/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift index 28267c9f..affd323a 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaClockTests.swift @@ -23,10 +23,10 @@ import Foundation #endif @Suite("LambdaClock Tests") -@available(LambdaSwift 2.0, *) struct LambdaClockTests { @Test("Clock provides current time") + @available(LambdaSwift 2.0, *) func clockProvidesCurrentTime() { let clock = LambdaClock() let now = clock.now @@ -37,6 +37,7 @@ struct LambdaClockTests { } @Test("Instant can be advanced by duration") + @available(LambdaSwift 2.0, *) func instantCanBeAdvancedByDuration() { let clock = LambdaClock() let start = clock.now @@ -46,6 +47,7 @@ struct LambdaClockTests { } @Test("Duration calculation between instants") + @available(LambdaSwift 2.0, *) func durationCalculationBetweenInstants() { let clock = LambdaClock() let start = clock.now @@ -56,6 +58,7 @@ struct LambdaClockTests { } @Test("Instant comparison works correctly") + @available(LambdaSwift 2.0, *) func instantComparisonWorksCorrectly() { let clock = LambdaClock() let earlier = clock.now @@ -66,12 +69,14 @@ struct LambdaClockTests { } @Test("Clock minimum resolution is milliseconds") + @available(LambdaSwift 2.0, *) func clockMinimumResolutionIsMilliseconds() { let clock = LambdaClock() #expect(clock.minimumResolution == .milliseconds(1)) } @Test("Sleep until deadline works") + @available(LambdaSwift 2.0, *) func sleepUntilDeadlineWorks() async throws { let clock = LambdaClock() let start = clock.now @@ -88,6 +93,7 @@ struct LambdaClockTests { } @Test("Sleep with past deadline returns immediately") + @available(LambdaSwift 2.0, *) func sleepWithPastDeadlineReturnsImmediately() async throws { let clock = LambdaClock() let now = clock.now @@ -103,6 +109,7 @@ struct LambdaClockTests { } @Test("Duration to future instant returns negative duration") + @available(LambdaSwift 2.0, *) func durationToFutureInstantReturnsNegativeDuration() { let clock = LambdaClock() let futureDeadline = clock.now.advanced(by: .seconds(30)) @@ -117,6 +124,7 @@ struct LambdaClockTests { } @Test("LambdaClock now matches Foundation Date within tolerance") + @available(LambdaSwift 2.0, *) func lambdaClockNowMatchesFoundationDate() { let clock = LambdaClock() @@ -138,6 +146,7 @@ struct LambdaClockTests { ) } @Test("Instant renders as string with an epoch number") + @available(LambdaSwift 2.0, *) func instantRendersAsStringWithEpochNumber() { let clock = LambdaClock() let instant = clock.now diff --git a/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift index 98023eae..7a53c1ef 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaContextTests.swift @@ -19,7 +19,6 @@ import Testing @testable import AWSLambdaRuntime @Suite("LambdaContext ClientContext Tests") -@available(LambdaSwift 2.0, *) struct LambdaContextTests { @Test("ClientContext with full data resolves correctly") @@ -115,6 +114,7 @@ struct LambdaContextTests { } @Test("getRemainingTime returns positive duration for future deadline") + @available(LambdaSwift 2.0, *) func getRemainingTimeReturnsPositiveDurationForFutureDeadline() { // Create context with deadline 30 seconds in the future diff --git a/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift index f44013f3..bcd38894 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaResponseStreamWriter+HeadersTests.swift @@ -24,10 +24,10 @@ import Foundation #endif @Suite("LambdaResponseStreamWriter+Headers Tests") -@available(LambdaSwift 2.0, *) struct LambdaResponseStreamWriterHeadersTests { @Test("Write status and headers with minimal response (status code only)") + @available(LambdaSwift 2.0, *) func testWriteStatusAndHeadersMinimal() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse(statusCode: 200) @@ -44,6 +44,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Write status and headers with full response (all fields populated)") + @available(LambdaSwift 2.0, *) func testWriteStatusAndHeadersFull() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse( @@ -80,6 +81,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Write status and headers with custom encoder") + @available(LambdaSwift 2.0, *) func testWriteStatusAndHeadersWithCustomEncoder() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse( @@ -107,6 +109,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Write status and headers with only headers (no multiValueHeaders)") + @available(LambdaSwift 2.0, *) func testWriteStatusAndHeadersOnlyHeaders() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse( @@ -132,6 +135,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Write status and headers with only multiValueHeaders (no headers)") + @available(LambdaSwift 2.0, *) func testWriteStatusAndHeadersOnlyMultiValueHeaders() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse( @@ -162,6 +166,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Verify JSON serialization format matches expected structure") + @available(LambdaSwift 2.0, *) func testJSONSerializationFormat() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse( @@ -199,6 +204,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Verify buffer contains both JSON and null byte separator") + @available(LambdaSwift 2.0, *) func testBufferContainsJsonAndSeparator() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse(statusCode: 200) @@ -219,6 +225,7 @@ struct LambdaResponseStreamWriterHeadersTests { // MARK: - Error Handling Tests @Test("JSON serialization error propagation") + @available(LambdaSwift 2.0, *) func testJSONSerializationErrorPropagation() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse(statusCode: 200) @@ -236,6 +243,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Write method error propagation") + @available(LambdaSwift 2.0, *) func testWriteMethodErrorPropagation() async throws { let writer = FailingMockLambdaResponseStreamWriter(failOnWriteCall: 1) // Fail on first write let response = StreamingLambdaStatusAndHeadersResponse(statusCode: 200) @@ -252,6 +260,7 @@ struct LambdaResponseStreamWriterHeadersTests { // This test is no longer needed since we only have one write operation now @Test("Error types and messages are properly handled") + @available(LambdaSwift 2.0, *) func testErrorTypesAndMessages() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse(statusCode: 200) @@ -272,6 +281,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("JSONEncoder error propagation with invalid data") + @available(LambdaSwift 2.0, *) func testJSONEncoderErrorPropagation() async throws { let writer = MockLambdaResponseStreamWriter() @@ -293,6 +303,7 @@ struct LambdaResponseStreamWriterHeadersTests { // MARK: - Integration Tests @Test("Integration: writeStatusAndHeaders with existing streaming methods") + @available(LambdaSwift 2.0, *) func testIntegrationWithExistingStreamingMethods() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse( @@ -337,6 +348,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Integration: multiple header writes work correctly") + @available(LambdaSwift 2.0, *) func testMultipleHeaderWrites() async throws { let writer = MockLambdaResponseStreamWriter() @@ -371,6 +383,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Integration: header write followed by body streaming compatibility") + @available(LambdaSwift 2.0, *) func testHeaderWriteFollowedByBodyStreaming() async throws { let writer = MockLambdaResponseStreamWriter() @@ -419,6 +432,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Integration: verify method works with different LambdaResponseStreamWriter implementations") + @available(LambdaSwift 2.0, *) func testWithDifferentWriterImplementations() async throws { // Test with basic mock implementation let basicWriter = MockLambdaResponseStreamWriter() @@ -442,6 +456,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Integration: complex scenario with headers, streaming, and finish") + @available(LambdaSwift 2.0, *) func testComplexIntegrationScenario() async throws { let writer = MockLambdaResponseStreamWriter() @@ -494,6 +509,7 @@ struct LambdaResponseStreamWriterHeadersTests { } @Test("Integration: verify compatibility with protocol requirements") + @available(LambdaSwift 2.0, *) func testProtocolCompatibility() async throws { let writer = MockLambdaResponseStreamWriter() let response = StreamingLambdaStatusAndHeadersResponse(statusCode: 200) diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift index 3a87dc8d..477abd8c 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift @@ -25,8 +25,8 @@ import Foundation #endif @Suite -@available(LambdaSwift 2.0, *) struct LambdaRunLoopTests { + @available(LambdaSwift 2.0, *) struct MockEchoHandler: StreamingLambdaHandler { func handle( _ event: ByteBuffer, @@ -38,6 +38,7 @@ struct LambdaRunLoopTests { } } + @available(LambdaSwift 2.0, *) struct FailingHandler: StreamingLambdaHandler { func handle( _ event: ByteBuffer, @@ -49,19 +50,19 @@ struct LambdaRunLoopTests { } } - let mockClient = MockLambdaClient() - let mockEchoHandler = MockEchoHandler() - let failingHandler = FailingHandler() - - @Test func testRunLoop() async throws { + @Test + @available(LambdaSwift 2.0, *) + func testRunLoop() async throws { + let mockClient = MockLambdaClient() + let mockEchoHandler = MockEchoHandler() let inputEvent = ByteBuffer(string: "Test Invocation Event") try await withThrowingTaskGroup(of: Void.self) { group in let logStore = CollectEverythingLogHandler.LogStore() group.addTask { try await Lambda.runLoop( - runtimeClient: self.mockClient, - handler: self.mockEchoHandler, + runtimeClient: mockClient, + handler: mockEchoHandler, logger: Logger( label: "RunLoopTest", factory: { _ in CollectEverythingLogHandler(logStore: logStore) } @@ -70,7 +71,7 @@ struct LambdaRunLoopTests { } let requestID = UUID().uuidString - let response = try await self.mockClient.invoke(event: inputEvent, requestID: requestID) + let response = try await mockClient.invoke(event: inputEvent, requestID: requestID) #expect(response == inputEvent) logStore.assertContainsLog("Test", ("aws-request-id", .exactMatch(requestID))) @@ -78,15 +79,19 @@ struct LambdaRunLoopTests { } } - @Test func testRunLoopError() async throws { + @Test + @available(LambdaSwift 2.0, *) + func testRunLoopError() async throws { + let mockClient = MockLambdaClient() + let failingHandler = FailingHandler() let inputEvent = ByteBuffer(string: "Test Invocation Event") await withThrowingTaskGroup(of: Void.self) { group in let logStore = CollectEverythingLogHandler.LogStore() group.addTask { try await Lambda.runLoop( - runtimeClient: self.mockClient, - handler: self.failingHandler, + runtimeClient: mockClient, + handler: failingHandler, logger: Logger( label: "RunLoopTest", factory: { _ in CollectEverythingLogHandler(logStore: logStore) } @@ -98,7 +103,7 @@ struct LambdaRunLoopTests { await #expect( throws: LambdaError.handlerError, performing: { - try await self.mockClient.invoke(event: inputEvent, requestID: requestID) + try await mockClient.invoke(event: inputEvent, requestID: requestID) } ) logStore.assertContainsLog("Test", ("aws-request-id", .exactMatch(requestID))) diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift index 65029199..0954eb10 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntime+ServiceLifeCycle.swift @@ -19,9 +19,9 @@ import Testing import Logging @Suite -@available(LambdaSwift 2.0, *) struct LambdaRuntimeServiceLifecycleTests { @Test + @available(LambdaSwift 2.0, *) func testLambdaRuntimeGracefulShutdown() async throws { let runtime = LambdaRuntime { (event: String, context: LambdaContext) in diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift index 3e18b217..a5b22471 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeClientTests.swift @@ -23,7 +23,6 @@ import struct Foundation.UUID @testable import AWSLambdaRuntime @Suite -@available(LambdaSwift 2.0, *) struct LambdaRuntimeClientTests { let logger = { @@ -34,6 +33,7 @@ struct LambdaRuntimeClientTests { }() @Test + @available(LambdaSwift 2.0, *) func testSimpleInvocations() async throws { struct HappyBehavior: LambdaServerBehavior { let requestId = UUID().uuidString @@ -128,6 +128,7 @@ struct LambdaRuntimeClientTests { } @Test + @available(LambdaSwift 2.0, *) func testStreamingResponseHeaders() async throws { let behavior = StreamingBehavior() @@ -154,6 +155,7 @@ struct LambdaRuntimeClientTests { } @Test + @available(LambdaSwift 2.0, *) func testStreamingResponseHeadersWithCustomStatus() async throws { let behavior = StreamingBehavior(customHeaders: true) @@ -189,6 +191,7 @@ struct LambdaRuntimeClientTests { } @Test + @available(LambdaSwift 2.0, *) func testRuntimeClientCancellation() async throws { struct HappyBehavior: LambdaServerBehavior { let requestId = UUID().uuidString @@ -286,6 +289,7 @@ struct LambdaRuntimeClientTests { "Server closing the connection when waiting for next invocation throws an error", arguments: [DisconnectBehavior(), DisconnectAfterSendingResponseBehavior()] as [any LambdaServerBehavior] ) + @available(LambdaSwift 2.0, *) func testChannelCloseFutureWithWaitingForNextInvocation(behavior: LambdaServerBehavior) async throws { try await withMockServer(behaviour: behavior) { port in let configuration = LambdaRuntimeClient.Configuration(ip: "127.0.0.1", port: port) diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift index ea995a5b..17c4cbf0 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRuntimeTests.swift @@ -21,10 +21,10 @@ import Testing @testable import AWSLambdaRuntime @Suite("LambdaRuntimeTests") -@available(LambdaSwift 2.0, *) struct LambdaRuntimeTests { @Test("LambdaRuntime can only be run once") + @available(LambdaSwift 2.0, *) func testLambdaRuntimerunOnce() async throws { // First runtime @@ -69,6 +69,7 @@ struct LambdaRuntimeTests { } } @Test("run() must be cancellable") + @available(LambdaSwift 2.0, *) func testLambdaRuntimeCancellable() async throws { let logger = Logger(label: "LambdaRuntimeTests.RuntimeCancellable") diff --git a/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift b/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift index b271e51f..f35b08a0 100644 --- a/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift +++ b/Tests/AWSLambdaRuntimeTests/MockLambdaClient.swift @@ -60,7 +60,9 @@ enum LambdaError: Error, Equatable { final actor MockLambdaClient: LambdaRuntimeClientProtocol { typealias Writer = MockLambdaWriter + @available(LambdaSwift 2.0, *) private struct StateMachine { + @available(LambdaSwift 2.0, *) private enum State { // The Lambda has just started, or an event has finished processing and the runtime is ready to receive more events. // Expecting a next() call by the runtime. @@ -81,6 +83,7 @@ final actor MockLambdaClient: LambdaRuntimeClientProtocol { // Queue incoming events if the runtime is busy handling an event. private var eventQueue = [Event]() + @available(LambdaSwift 2.0, *) enum InvokeAction { // The next endpoint is waiting for an event. Deliver this newly arrived event to it. case readyToProcess(_ eventArrivedHandler: CheckedContinuation) @@ -89,6 +92,7 @@ final actor MockLambdaClient: LambdaRuntimeClientProtocol { case wait } + @available(LambdaSwift 2.0, *) enum NextAction { // There is an event available to be processed. case readyToProcess(Invocation) @@ -99,6 +103,7 @@ final actor MockLambdaClient: LambdaRuntimeClientProtocol { case fail(LambdaError) } + @available(LambdaSwift 2.0, *) enum CancelNextAction { case none @@ -211,6 +216,7 @@ final actor MockLambdaClient: LambdaRuntimeClientProtocol { private var stateMachine = StateMachine() + @available(LambdaSwift 2.0, *) struct Event { let invocation: Invocation let eventProcessedHandler: CheckedContinuation diff --git a/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift index a2b5ebe5..8429f7fd 100644 --- a/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeTests/MockLambdaServer.swift @@ -25,7 +25,6 @@ import FoundationEssentials import Foundation #endif -@available(LambdaSwift 2.0, *) func withMockServer( behaviour: some LambdaServerBehavior, port: Int = 0, @@ -47,7 +46,6 @@ func withMockServer( return try result.get() } -@available(LambdaSwift 2.0, *) final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") private let behavior: Behavior @@ -115,7 +113,6 @@ final class MockLambdaServer { } } -@available(LambdaSwift 2.0, *) final class HTTPHandler: ChannelInboundHandler { typealias InboundIn = HTTPServerRequestPart typealias OutboundOut = HTTPServerResponsePart @@ -187,10 +184,16 @@ final class HTTPHandler: ChannelInboundHandler { responseStatus = .ok responseBody = result let deadline = Date(timeIntervalSinceNow: 60).millisSinceEpoch + let traceID: String + if #available(macOS 15.0, *) { + traceID = "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1" + } else { + traceID = "Root=1-00000000-000000000000000000000000;Sampled=1" + } responseHeaders = [ (AmazonHeaders.requestID, requestId), (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), - (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), + (AmazonHeaders.traceID, traceID), (AmazonHeaders.deadline, String(deadline)), ] case .failure(let error): diff --git a/Tests/AWSLambdaRuntimeTests/PoolTests.swift b/Tests/AWSLambdaRuntimeTests/PoolTests.swift index 05a1402b..8cbe8a2e 100644 --- a/Tests/AWSLambdaRuntimeTests/PoolTests.swift +++ b/Tests/AWSLambdaRuntimeTests/PoolTests.swift @@ -16,10 +16,10 @@ import Testing @testable import AWSLambdaRuntime -@available(LambdaSwift 2.0, *) struct PoolTests { @Test + @available(LambdaSwift 2.0, *) func testBasicPushAndIteration() async throws { let pool = LambdaHTTPServer.Pool() @@ -38,6 +38,7 @@ struct PoolTests { } @Test + @available(LambdaSwift 2.0, *) func testPoolCancellation() async throws { let pool = LambdaHTTPServer.Pool() @@ -56,6 +57,7 @@ struct PoolTests { } @Test + @available(LambdaSwift 2.0, *) func testConcurrentPushAndIteration() async throws { let pool = LambdaHTTPServer.Pool() let iterations = 1000 @@ -91,6 +93,7 @@ struct PoolTests { } @Test + @available(LambdaSwift 2.0, *) func testPushToWaitingConsumer() async throws { let pool = LambdaHTTPServer.Pool() let expectedValue = "test value" @@ -114,6 +117,7 @@ struct PoolTests { } @Test + @available(LambdaSwift 2.0, *) func testStressTest() async throws { let pool = LambdaHTTPServer.Pool() let producerCount = 10 diff --git a/Tests/AWSLambdaRuntimeTests/UtilsTest.swift b/Tests/AWSLambdaRuntimeTests/UtilsTest.swift index 5bbaf32d..e519ce0c 100644 --- a/Tests/AWSLambdaRuntimeTests/UtilsTest.swift +++ b/Tests/AWSLambdaRuntimeTests/UtilsTest.swift @@ -16,9 +16,9 @@ import Testing @testable import AWSLambdaRuntime -@available(LambdaSwift 2.0, *) struct UtilsTest { @Test + @available(LambdaSwift 2.0, *) func testGenerateXRayTraceID() { // the time and identifier should be in hexadecimal digits let allowedCharacters = "0123456789abcdef" From 4c476fd0f33c1e47c5bb49b49d1e8f9d0aab9d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 2 Sep 2025 15:52:43 +0200 Subject: [PATCH 9/9] swift-format --- Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift index 477abd8c..0be96376 100644 --- a/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift +++ b/Tests/AWSLambdaRuntimeTests/LambdaRunLoopTests.swift @@ -50,7 +50,7 @@ struct LambdaRunLoopTests { } } - @Test + @Test @available(LambdaSwift 2.0, *) func testRunLoop() async throws { let mockClient = MockLambdaClient() @@ -79,7 +79,7 @@ struct LambdaRunLoopTests { } } - @Test + @Test @available(LambdaSwift 2.0, *) func testRunLoopError() async throws { let mockClient = MockLambdaClient()