import ArgumentParser import Hummingbird import Logging @main struct App: AsyncParsableCommand, AppArguments { @Option(name: .shortAndLong) var hostname: String = "127.0.0.1" @Option(name: .shortAndLong) var port: Int = 8080 @Option(name: .shortAndLong) var logLevel: Logger.Level? @Flag(name: .shortAndLong) var migrate: Bool = false @Flag(name: .shortAndLong) var revert: Bool = false @Flag(name: .shortAndLong) var inMemoryDatabase: Bool = false func run() async throws { let app = try await buildApplication(self) try await app.runService() } } /// Extend `Logger.Level` so it can be used as an argument #if hasFeature(RetroactiveAttribute) extension Logger.Level: @retroactive ExpressibleByArgument { public init?(argument: String) { self.init(rawValue: argument) } } #else extension Logger.Level: ExpressibleByArgument {} #endif