42 lines
900 B
Swift
42 lines
900 B
Swift
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
|