import Hummingbird import Infrastructure import NIOCore /// The website's request context. /// /// Extends the core request storage with the negotiated language, defaulting to the default supported language until ``LocalizationMiddleware`` /// resolves it from the request, and with the connected client's address, so ``RateLimitMiddleware`` can key its budgets per client. public struct WebsiteRequestContext: LocalizedRequestContext, RemoteAddressRequestContext { // MARK: Properties /// The core request context storage Hummingbird requires. public var coreContext: CoreRequestContextStorage /// The language identifier negotiated for the request. public var language: String /// The address of the connected client, captured from the source channel. public let remoteAddress: SocketAddress? // MARK: Initializers /// Creates a request context for the given source. /// - Parameter source: the source the context is initialized from. public init( source: Source, ) { self.coreContext = .init(source: source) self.language = .empty self.remoteAddress = source.channel.remoteAddress } } // MARK: - Constants private extension String { static let empty = "" }