mirror of
https://github.com/swift-server/swift-aws-lambda-runtime.git
synced 2026-06-02 07:27:33 +00:00
Fix https://github.com/swift-server/swift-aws-lambda-runtime/issues/520
61 lines
1.9 KiB
Swift
61 lines
1.9 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftAWSLambdaRuntime open source project
|
|
//
|
|
// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import AWSLambdaRuntime
|
|
import NIOCore
|
|
|
|
#if canImport(FoundationEssentials)
|
|
import FoundationEssentials
|
|
#else
|
|
import Foundation
|
|
#endif
|
|
|
|
struct SendNumbersWithPause: StreamingLambdaHandler {
|
|
func handle(
|
|
_ event: ByteBuffer,
|
|
responseWriter: some LambdaResponseStreamWriter,
|
|
context: LambdaContext
|
|
) async throws {
|
|
|
|
// Send HTTP status code and headers before streaming the response body
|
|
try await responseWriter.writeStatusAndHeaders(
|
|
StreamingLambdaStatusAndHeadersResponse(
|
|
statusCode: 418, // I'm a tea pot
|
|
headers: [
|
|
"Content-Type": "text/plain",
|
|
"x-my-custom-header": "streaming-example",
|
|
]
|
|
)
|
|
)
|
|
|
|
// Stream numbers with pauses to demonstrate streaming functionality
|
|
for i in 1...3 {
|
|
// Send partial data
|
|
try await responseWriter.write(ByteBuffer(string: "Number: \(i)\n"))
|
|
|
|
// Perform some long asynchronous work to simulate processing
|
|
try await Task.sleep(for: .milliseconds(1000))
|
|
}
|
|
|
|
// Send final message
|
|
try await responseWriter.write(ByteBuffer(string: "Streaming complete!\n"))
|
|
|
|
// All data has been sent. Close off the response stream.
|
|
try await responseWriter.finish()
|
|
}
|
|
}
|
|
|
|
let runtime = LambdaRuntime(handler: SendNumbersWithPause())
|
|
try await runtime.run()
|