44 lines
1.1 KiB
Swift
44 lines
1.1 KiB
Swift
import Vapor
|
|
import Dispatch
|
|
import Logging
|
|
|
|
/// 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 {
|
|
shutdown()
|
|
app.shutdown()
|
|
}
|
|
|
|
do {
|
|
try await configure(app)
|
|
} catch {
|
|
app.logger.report(error: error)
|
|
throw error
|
|
}
|
|
try await app.runFromAsyncMainEntrypoint()
|
|
}
|
|
}
|