mirror of
https://github.com/swift-server/swift-aws-lambda-runtime.git
synced 2026-05-03 07:22:27 +00:00
e6ba07fd06
Now that task cancellation works, re publishing this PR with a new example for Swift Service Lifecycle
58 lines
1.9 KiB
Swift
58 lines
1.9 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftAWSLambdaRuntime open source project
|
|
//
|
|
// Copyright (c) 2025 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Hummingbird server framework project
|
|
//
|
|
// Copyright (c) 2024 the Hummingbird authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See hummingbird/CONTRIBUTORS.txt for the list of Hummingbird authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Copied from https://github.com/hummingbird-project/hummingbird/blob/main/Sources/Hummingbird/Utils/PreludeService.swift
|
|
|
|
import ServiceLifecycle
|
|
|
|
/// Wrap another service to run after a prelude closure has completed
|
|
struct PreludeService<S: Service>: Service, CustomStringConvertible {
|
|
let prelude: @Sendable () async throws -> Void
|
|
let service: S
|
|
|
|
var description: String {
|
|
"PreludeService<\(S.self)>"
|
|
}
|
|
|
|
init(service: S, prelude: @escaping @Sendable () async throws -> Void) {
|
|
self.service = service
|
|
self.prelude = prelude
|
|
}
|
|
|
|
func run() async throws {
|
|
try await self.prelude()
|
|
try await self.service.run()
|
|
}
|
|
}
|
|
|
|
extension Service {
|
|
/// Build existential ``PreludeService`` from an existential `Service`
|
|
func withPrelude(_ prelude: @escaping @Sendable () async throws -> Void) -> Service {
|
|
PreludeService(service: self, prelude: prelude)
|
|
}
|
|
}
|