code: 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
  }
docs: // 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.