func PerformHandlerWithJSON(rawJSON []byte, handler HandlerFunc, logger boshlog.Logger) ([]byte, Request, error) {
	var request Request

	err := json.Unmarshal(rawJSON, &request)
	if err != nil {
		return []byte{}, request, bosherr.WrapError(err, "Unmarshalling JSON payload")
	}

	request.Payload = rawJSON

	logger.Info(mbusHandlerLogTag, "Received request with action %s", request.Method)
	logger.DebugWithDetails(mbusHandlerLogTag, "Payload", request.Payload)

	response := handler(request)
	if response == nil {
		logger.Info(mbusHandlerLogTag, "Nil response returned from handler")
		return []byte{}, request, nil
	}

	respJSON, err := json.Marshal(response)
	if err != nil {
		logger.Info(mbusHandlerLogTag, "Marshal response error")
		return respJSON, request, bosherr.WrapError(err, "Marshalling JSON response")
	}

	logger.Info(mbusHandlerLogTag, "Responding")
	logger.DebugWithDetails(mbusHandlerLogTag, "Payload", respJSON)

	return respJSON, request, nil
}
func PerformHandlerWithJSON(rawJSON []byte, handler HandlerFunc, logger boshlog.Logger) (moreJSON []byte, request Request, err error) {
	err = json.Unmarshal(rawJSON, &request)
	if err != nil {
		err = bosherr.WrapError(err, "Unmarshalling JSON payload")
		return
	}
	request.Payload = rawJSON

	logger.Info("MBus Handler", "Received request with action %s", request.Method)
	logger.DebugWithDetails("MBus Handler", "Payload", request.Payload)

	response := handler(request)

	if response == nil {
		moreJSON = []byte{}
		return
	}

	moreJSON, err = json.Marshal(response)
	if err != nil {
		err = bosherr.WrapError(err, "Marshalling JSON response")
		return
	}

	logger.Info("MBus Handler", "Responding")
	logger.DebugWithDetails("MBus Handler", "Payload", moreJSON)

	return
}