@@ -10,11 +10,8 @@ import (
10
10
// into a mohttp.Handler
11
11
func FromHTTPMiddleware (fn func (http.Handler ) http.Handler ) Handler {
12
12
return HandlerFunc (func (c context.Context ) {
13
- fn (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
14
- c = WithRequest (c , r )
15
- c = WithResponseWriter (c , w )
16
- Next (c )
17
- })).ServeHTTP (GetResponseWriter (c ), GetRequest (c ))
13
+ h := fn (mkNextHTTPHandler (c ))
14
+ h .ServeHTTP (GetResponseWriter (c ), GetRequest (c ))
18
15
})
19
16
}
20
17
@@ -26,3 +23,31 @@ func FromHTTPHandler(handler http.Handler) Handler {
26
23
Next (c )
27
24
})
28
25
}
26
+
27
+ type NegronHandler interface {
28
+ ServeHTTP (http.ResponseWriter , * http.Request , http.HandlerFunc )
29
+ }
30
+
31
+ type NegroniHandlerFunc func (rw http.ResponseWriter , r * http.Request , next http.HandlerFunc )
32
+
33
+ func (fn NegroniHandlerFunc ) ServeHTTP (rw http.ResponseWriter , r * http.Request , next http.HandlerFunc ) {
34
+ fn (rw , r , next )
35
+ }
36
+
37
+ func FromNegroniHandler (n NegronHandler ) Handler {
38
+ return HandlerFunc (func (c context.Context ) {
39
+ n .ServeHTTP (GetResponseWriter (c ), GetRequest (c ), mkNextHTTPHandler (c ))
40
+ })
41
+ }
42
+
43
+ func FromNegroniHandlerFunc (fn func (http.ResponseWriter , * http.Request , http.HandlerFunc )) Handler {
44
+ return FromNegroniHandler (NegroniHandlerFunc (fn ))
45
+ }
46
+
47
+ func mkNextHTTPHandler (c context.Context ) http.HandlerFunc {
48
+ return func (w http.ResponseWriter , r * http.Request ) {
49
+ c = WithRequest (c , r )
50
+ c = WithResponseWriter (c , w )
51
+ Next (c )
52
+ }
53
+ }
0 commit comments