func wrapTypedFunction()

in funcframework/framework.go [235:260]


func wrapTypedFunction(fn interface{}) (http.Handler, error) {
	inputType, err := validateTypedFunction(fn)
	if err != nil {
		return nil, err
	}
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		body, err := readHTTPRequestBody(r)
		if err != nil {
			writeHTTPErrorResponse(w, http.StatusBadRequest, crashStatus, fmt.Sprintf("%v", err))
			return
		}
		argVal := inputType

		if err := json.Unmarshal(body, argVal.Interface()); err != nil {
			writeHTTPErrorResponse(w, http.StatusBadRequest, crashStatus, fmt.Sprintf("Error while converting input data. %s", err.Error()))
			return
		}

		defer recoverPanic(w, "user function execution", false)
		funcReturn := reflect.ValueOf(fn).Call([]reflect.Value{
			argVal.Elem(),
		})

		handleTypedReturn(w, funcReturn)
	}), nil
}