Documented the AppBuilder type in the library target.
This commit is contained in:
parent
ab4a9207c5
commit
7929f55c22
@ -1,72 +0,0 @@
|
||||
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()
|
||||
|
||||
router.addMiddleware {
|
||||
LogRequestsMiddleware(logger.logLevel)
|
||||
DocCMiddleware("Resources/Archives")
|
||||
}
|
||||
|
||||
router.get("/") { _,_ in
|
||||
""
|
||||
}
|
||||
|
||||
return router
|
||||
}
|
||||
|
||||
}
|
85
Library/Sources/Public/Builders/AppBuilder.swift
Normal file
85
Library/Sources/Public/Builders/AppBuilder.swift
Normal file
@ -0,0 +1,85 @@
|
||||
import Hummingbird
|
||||
import Logging
|
||||
|
||||
/// A type that sets and builds an application that should be ready to run.
|
||||
public struct AppBuilder {
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
private let appName: String
|
||||
private let archivesFolder: String
|
||||
private let environment: Environment
|
||||
|
||||
// MARK: Initialisers
|
||||
|
||||
/// Initialises this type.
|
||||
/// - Parameters:
|
||||
/// - appName: A name for the app to build.
|
||||
/// - archivesFolder: A relative path to the location of the *DocC* archive containers.
|
||||
public init(
|
||||
appName: String,
|
||||
archivesFolder: String
|
||||
) {
|
||||
self.appName = appName
|
||||
self.archivesFolder = archivesFolder
|
||||
self.environment = Environment()
|
||||
}
|
||||
|
||||
// MARK: Functions
|
||||
|
||||
/// Sets and builds a ready-to-use application.
|
||||
///
|
||||
/// The application this function builds have the following features:
|
||||
/// * proxy requests to any available *DocC* archive container in the `archivesFolder` location;
|
||||
/// * log any request to any available *DocC* archive container in the application console.
|
||||
///
|
||||
/// - Parameter arguments: A set in input parameters used while building the application.
|
||||
/// - Returns: A configured, functional application that is ready to use.
|
||||
public func callAsFunction(_ arguments: some AppArguments) async throws -> some ApplicationProtocol {
|
||||
let logger = logger(level: arguments.logLevel)
|
||||
let router = router(logger: logger)
|
||||
|
||||
return Application(
|
||||
router: router,
|
||||
configuration: .init(
|
||||
address: .hostname(arguments.hostname, port: arguments.port),
|
||||
serverName: appName
|
||||
),
|
||||
logger: logger
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
private extension AppBuilder {
|
||||
|
||||
// MARK: Type aliases
|
||||
|
||||
typealias AppRequestContext = BasicRequestContext
|
||||
|
||||
// MARK: Functions
|
||||
|
||||
func logger(level: Logger.Level?) -> Logger {
|
||||
var logger = Logger(label: appName)
|
||||
|
||||
logger.logLevel = level
|
||||
?? environment.logLevel.flatMap { Logger.Level(rawValue: $0) ?? .info }
|
||||
?? .info
|
||||
|
||||
return logger
|
||||
}
|
||||
|
||||
func router(logger: Logger) -> Router<AppRequestContext> {
|
||||
let router = Router()
|
||||
|
||||
router.addMiddleware {
|
||||
LogRequestsMiddleware(logger.logLevel)
|
||||
DocCMiddleware(archivesFolder)
|
||||
}
|
||||
|
||||
return router
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user