package web import ( "log" "net/http" ) const unknownHandler = `Unknown handler type %T. See http://godoc.org/github.com/zenazn/goji/web#HandlerType for a list of acceptable types.` type netHTTPHandlerWrap struct{ http.Handler } type netHTTPHandlerFuncWrap struct { fn func(http.ResponseWriter, *http.Request) } type handlerFuncWrap struct { fn func(C, http.ResponseWriter, *http.Request) } func (h netHTTPHandlerWrap) ServeHTTPC(c C, w http.ResponseWriter, r *http.Request) { h.Handler.ServeHTTP(w, r) } func (h netHTTPHandlerFuncWrap) ServeHTTPC(c C, w http.ResponseWriter, r *http.Request) { h.fn(w, r) } func (h handlerFuncWrap) ServeHTTPC(c C, w http.ResponseWriter, r *http.Request) { h.fn(c, w, r) } func parseHandler(h HandlerType) Handler { switch f := h.(type) { case func(c C, w http.ResponseWriter, r *http.Request): return handlerFuncWrap{f} case func(w http.ResponseWriter, r *http.Request): return netHTTPHandlerFuncWrap{f} case Handler: return f case http.Handler: return netHTTPHandlerWrap{f} default: log.Fatalf(unknownHandler, h) panic("log.Fatalf does not return") } }