2025-02-22 10:21:07 +01:00
|
|
|
import Hummingbird
|
|
|
|
import Logging
|
|
|
|
|
|
|
|
public struct AppBuilder {
|
|
|
|
|
|
|
|
// MARK: Properties
|
|
|
|
|
|
|
|
private let environment: Environment
|
|
|
|
private let name: String
|
|
|
|
|
|
|
|
// MARK: Initialisers
|
|
|
|
|
|
|
|
public init(name: String) {
|
|
|
|
self.environment = Environment()
|
|
|
|
self.name = name
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: Functions
|
|
|
|
|
|
|
|
public func callAsFunction(
|
|
|
|
_ arguments: some AppArguments
|
|
|
|
) async throws -> some ApplicationProtocol {
|
|
|
|
let logger = {
|
|
|
|
var logger = Logger(label: name)
|
|
|
|
|
|
|
|
logger.logLevel = arguments.logLevel
|
|
|
|
?? environment.logLevel.flatMap { Logger.Level(rawValue: $0) ?? .info }
|
|
|
|
?? .info
|
|
|
|
|
|
|
|
return logger
|
|
|
|
}()
|
|
|
|
|
|
|
|
let router = router(logger: logger)
|
|
|
|
|
|
|
|
return Application(
|
|
|
|
router: router,
|
|
|
|
configuration: .init(
|
|
|
|
address: .hostname(arguments.hostname, port: arguments.port),
|
|
|
|
serverName: name
|
|
|
|
),
|
|
|
|
logger: logger
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - Helpers
|
|
|
|
|
|
|
|
private extension AppBuilder {
|
|
|
|
|
|
|
|
// MARK: Type aliases
|
|
|
|
|
|
|
|
typealias AppRequestContext = BasicRequestContext
|
|
|
|
|
|
|
|
// MARK: Functions
|
|
|
|
|
|
|
|
func router(logger: Logger) -> Router<AppRequestContext> {
|
|
|
|
let router = Router()
|
|
|
|
|
2025-02-26 00:24:25 +01:00
|
|
|
router.addMiddleware {
|
|
|
|
LogRequestsMiddleware(logger.logLevel)
|
|
|
|
DocCMiddleware("Resources/Archives")
|
|
|
|
}
|
|
|
|
|
2025-02-22 10:21:07 +01:00
|
|
|
router.get("/") { _,_ in
|
|
|
|
""
|
|
|
|
}
|
|
|
|
|
|
|
|
return router
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|