@preconcurrency import Vapor import Dispatch import Logging private struct UncheckedApplication: @unchecked Sendable { let app: Application } /// This extension is temporary and can be removed once Vapor gets this support. private extension Vapor.Application { static let baseExecutionQueue = DispatchQueue(label: "vapor.codes.entrypoint") func runFromAsyncMainEntrypoint() async throws { try await withCheckedThrowingContinuation { continuation in Vapor.Application.baseExecutionQueue.async { [self] in do { try self.run() continuation.resume() } catch { continuation.resume(throwing: error) } } } } } @main enum Entrypoint { static func main() async throws { var env = try Environment.detect() try LoggingSystem.bootstrap(from: &env) let app = Application(env) defer { app.shutdown() } try await configure(app) do { try await app.runFromAsyncMainEntrypoint() } catch { print("STARTUP ERROR:", String(reflecting: error)) throw error } } }