Files
ccn/Services/Website/Sources/App/App+build.swift
T

63 lines
1.3 KiB
Swift
Raw Normal View History

2026-06-27 02:26:33 +00:00
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<AppRequestContext> {
let router = Router(context: AppRequestContext.self)
router.addMiddleware {
LogRequestsMiddleware(.info)
}
router.get("/") { _, _ in
return "Hello!"
}
return router
}