@@ -17,22 +17,35 @@ import HummingbirdCore
17
17
import NIOCore
18
18
19
19
/// Internally used to transform RequestContext
20
- struct TransformingRouterGroup < InputContext: RequestContext , Context: RequestContext > : RouterMethods where Context . Source == InputContext {
20
+ struct TransformingRouterGroup < InputContext: RequestContext , Context: RequestContext > : RouterMethods {
21
21
typealias TransformContext = Context
22
22
let parent : any RouterMethods < InputContext >
23
+ let transform : @Sendable ( Request, InputContext) async throws -> TransformContext
23
24
24
25
struct ContextTransformingResponder : HTTPResponder {
25
26
typealias Context = InputContext
26
27
let responder : any HTTPResponder < TransformContext >
28
+ let transform : @Sendable ( Request, InputContext) async throws -> TransformContext
27
29
28
30
func respond( to request: Request , context: InputContext ) async throws -> Response {
29
- let newContext = TransformContext ( source : context)
31
+ let newContext = try await transform ( request , context)
30
32
return try await self . responder. respond ( to: request, context: newContext)
31
33
}
32
34
}
33
35
34
- init ( parent: any RouterMethods < InputContext > ) {
36
+ init ( parent: any RouterMethods < InputContext > ) where Context . Source == InputContext {
35
37
self . parent = parent
38
+ self . transform = { _, context in
39
+ TransformContext ( source: context)
40
+ }
41
+ }
42
+
43
+ init (
44
+ parent: any RouterMethods < InputContext > ,
45
+ transform: @escaping @Sendable ( Request, InputContext) async throws -> TransformContext
46
+ ) {
47
+ self . parent = parent
48
+ self . transform = transform
36
49
}
37
50
38
51
/// Add middleware (Stub function as it isn't used)
@@ -52,7 +65,10 @@ struct TransformingRouterGroup<InputContext: RequestContext, Context: RequestCon
52
65
method: HTTPRequest . Method ,
53
66
responder: Responder
54
67
) -> Self where Responder. Context == Context {
55
- let transformResponder = ContextTransformingResponder ( responder: responder)
68
+ let transformResponder = ContextTransformingResponder (
69
+ responder: responder,
70
+ transform: transform
71
+ )
56
72
self . parent. on ( path, method: method, responder: transformResponder)
57
73
return self
58
74
}
0 commit comments