@@ -205,32 +205,11 @@ func loadBoneSingle(method, path string, handler http.Handler) http.Handler {
205
205
}
206
206
207
207
// Denco
208
- type dencoHandler struct {
209
- routerMap map [string ]* denco.Router
210
- params []denco.Param
211
- }
212
-
213
- func (h * dencoHandler ) ServeHTTP (w http.ResponseWriter , r * http.Request ) {
214
- router , found := h .routerMap [r .Method ]
215
- if ! found {
216
- panic ("Unknown HTTP method: " + r .Method )
217
- }
218
- meth , params , found := router .Lookup (r .URL .Path )
219
- if ! found {
220
- panic ("Router not found: " + r .URL .Path )
221
- }
222
- h .params = params
223
- meth .(http.HandlerFunc ).ServeHTTP (w , r )
224
- }
208
+ func dencoHandler (w http.ResponseWriter , r * http.Request , params denco.Params ) {}
225
209
226
- func (h * dencoHandler ) Get (w http.ResponseWriter , r * http.Request ) {}
227
- func (h * dencoHandler ) Post (w http.ResponseWriter , r * http.Request ) {}
228
- func (h * dencoHandler ) Put (w http.ResponseWriter , r * http.Request ) {}
229
- func (h * dencoHandler ) Patch (w http.ResponseWriter , r * http.Request ) {}
230
- func (h * dencoHandler ) Delete (w http.ResponseWriter , r * http.Request ) {}
231
- func (h * dencoHandler ) dencoHandlerWrite (w http.ResponseWriter , r * http.Request ) {
210
+ func dencoHandlerWrite (w http.ResponseWriter , r * http.Request , params denco.Params ) {
232
211
var name string
233
- for _ , param := range h . params {
212
+ for _ , param := range params {
234
213
if param .Name == "name" {
235
214
name = param .Value
236
215
break
@@ -240,46 +219,23 @@ func (h *dencoHandler) dencoHandlerWrite(w http.ResponseWriter, r *http.Request)
240
219
}
241
220
242
221
func loadDenco (routes []route ) http.Handler {
243
- handler := & dencoHandler {routerMap : map [string ]* denco.Router {
244
- "GET" : denco .New (),
245
- "POST" : denco .New (),
246
- "PUT" : denco .New (),
247
- "PATCH" : denco .New (),
248
- "DELETE" : denco .New (),
249
- }}
250
- recordMap := make (map [string ][]denco.Record )
222
+ mux := denco .NewMux ()
223
+ handlers := make ([]denco.Handler , 0 , len (routes ))
251
224
for _ , route := range routes {
252
- var f http.HandlerFunc
253
- switch route .method {
254
- case "GET" :
255
- f = handler .Get
256
- case "POST" :
257
- f = handler .Post
258
- case "PUT" :
259
- f = handler .Put
260
- case "PATCH" :
261
- f = handler .Patch
262
- case "DELETE" :
263
- f = handler .Delete
264
- }
265
- recordMap [route .method ] = append (recordMap [route .method ], denco .NewRecord (route .path , f ))
225
+ h := mux .Handler (route .method , route .path , dencoHandler )
226
+ handlers = append (handlers , h )
266
227
}
267
- for method , records := range recordMap {
268
- if err := handler .routerMap [method ].Build (records ); err != nil {
269
- panic (err )
270
- }
228
+ handler , err := mux .Build (handlers )
229
+ if err != nil {
230
+ panic (err )
271
231
}
272
232
return handler
273
233
}
274
234
275
- func loadDencoSingle (method , path string , handler * dencoHandler , hfunc http.HandlerFunc ) http.Handler {
276
- handler .routerMap = map [string ]* denco.Router {
277
- method : denco .New (),
278
- }
279
-
280
- if err := handler .routerMap [method ].Build ([]denco.Record {
281
- denco .NewRecord (path , hfunc ),
282
- }); err != nil {
235
+ func loadDencoSingle (method , path string , h denco.HandlerFunc ) http.Handler {
236
+ mux := denco .NewMux ()
237
+ handler , err := mux .Build ([]denco.Handler {mux .Handler (method , path , h )})
238
+ if err != nil {
283
239
panic (err )
284
240
}
285
241
return handler
0 commit comments