func setTarget()

in pkg/client/http/mapper.go [154:190]


func setTarget(target *requestParams, to string, key string, val any) error {
	valType := reflect.TypeOf(val)
	if (to == constant.Headers || to == constant.QueryStrings) && valType.Kind() != reflect.String {
		return errors.Errorf("%s only accepts string", to)
	}
	switch to {
	case constant.Headers:
		target.Header.Set(key, val.(string))
	case constant.RequestURI:
		target.URIParams.Set(key, val.(string))
	case constant.QueryStrings:
		target.Query.Set(key, val.(string))
	case constant.RequestBody:
		rawBody, err := io.ReadAll(target.Body)
		defer func() {
			target.Body = io.NopCloser(bytes.NewReader(rawBody))
		}()
		if err != nil {
			return errors.New("Raw body read failed")
		}
		mapBody := map[string]any{}
		if len(rawBody) != 0 {
			err = json.Unmarshal(rawBody, &mapBody)
			if err != nil {
				return errors.New("Raw body parse failed")
			}
		}
		setMapWithPath(mapBody, key, val)
		rawBody, err = json.Marshal(mapBody)
		if err != nil {
			return errors.New("Stringify map to body failed")
		}
	default:
		return errors.Errorf("Mapping target to %s does not support", to)
	}
	return nil
}