func validateAndWrapHandler(h Handler) Handler {
	if reflect.TypeOf(h).Kind() != reflect.Func {
		panic("Macaron handler must be a callable function")
	}

	if !inject.IsFastInvoker(h) {
		switch v := h.(type) {
		case func(*Context):
			return ContextInvoker(v)
		case func(*Context, *log.Logger):
			return LoggerInvoker(v)
		case func(http.ResponseWriter, *http.Request):
			return handlerFuncInvoker(v)
		case func(http.ResponseWriter, error):
			return internalServerErrorInvoker(v)
		}
	}
	return h
}
func validateAndWrapHandler(h Handler) Handler {
	if reflect.TypeOf(h).Kind() != reflect.Func {
		panic("Macaron handler must be a callable function")
	}

	if !inject.IsFastInvoker(h) {
		switch v := h.(type) {
		case func(*Context):
			return ContextInvoker(v)
		case func(*Context, *log.Logger):
			return LoggerInvoker(v)
		case func(http.ResponseWriter, *http.Request):
			return handlerFuncInvoker(v)
		case func(http.ResponseWriter, error):
			return internalServerErrorInvoker(v)
		}
	}
	return h
}
func validateAndWrapHandler ( h Handler ) Handler { if reflect . TypeOf ( h ) . Kind ( ) != reflect . Func { panic ( " " ) } if ! inject . IsFastInvoker ( h ) { switch v := h . ( type ) { case func ( * Context ) : return ContextInvoker ( v ) case func ( * Context , * log . Logger ) : return LoggerInvoker ( v ) case func ( http . ResponseWriter , * http . Request ) : return handlerFuncInvoker ( v ) case func ( http . ResponseWriter , error ) : return internalServerErrorInvoker ( v ) } } return h }
// validateAndWrapHandler makes sure a handler is a callable function, it panics if not.
// When the handler is also potential to be any built-in inject.FastInvoker,
// it wraps the handler automatically to have some performance gain.
validateAndWrapHandler makes sure a handler is a callable function it panics if not . When the handler is also potential to be any built - in inject . FastInvoker it wraps the handler automatically to have some performance gain .