import Configuration import Hummingbird import Logging /// Build application /// - Parameter reader: configuration reader func application( reader: ConfigReader ) async throws -> some ApplicationProtocol { let logLevel = reader.string( forKey: "log.level", as: Logger.Level.self, default: .info ) let serverName = reader.string( forKey: "http.serverName", default: "LoudWebsite" ) return Application( router: try router(), configuration: ApplicationConfiguration( reader: reader.scoped(to: "http") ), logger: logger( serverName: serverName, logLevel: logLevel ) ) } // MARK: - Helpers // Request context used by application private typealias AppRequestContext = BasicRequestContext /// Build logger private func logger( serverName: String, logLevel: Logger.Level ) -> Logger { var logger = Logger(label: serverName) logger.logLevel = logLevel return logger } /// Build router private func router() throws -> Router { let router = Router(context: AppRequestContext.self) router.addMiddleware { LogRequestsMiddleware(.info) } router.get("/") { _, _ in return "Hello!" } return router }