diff --git a/internal/gatewayapi/backendtrafficpolicy.go b/internal/gatewayapi/backendtrafficpolicy.go index b670a2ea28..aebcf86207 100644 --- a/internal/gatewayapi/backendtrafficpolicy.go +++ b/internal/gatewayapi/backendtrafficpolicy.go @@ -447,7 +447,7 @@ func (t *Translator) translateBackendTrafficPolicyForRouteWithMerge( if tfGW != nil && tfRoute != nil && tfGW.RateLimit != nil && tfRoute.RateLimit != nil { - mergedRL, err := utils.MergeRL(tfGW.RateLimit, tfRoute.RateLimit, *policy.Spec.MergeType) + mergedRL, err := utils.Merge(tfGW.RateLimit, tfRoute.RateLimit, *policy.Spec.MergeType) if err != nil { return fmt.Errorf("error merging rate limits: %w", err) } diff --git a/internal/utils/merge.go b/internal/utils/merge.go index 2c02230906..0e7360e3c8 100644 --- a/internal/utils/merge.go +++ b/internal/utils/merge.go @@ -11,13 +11,11 @@ import ( jsonpatch "github.com/evanphx/json-patch" "k8s.io/apimachinery/pkg/util/strategicpatch" - "sigs.k8s.io/controller-runtime/pkg/client" egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1" - "github.com/envoyproxy/gateway/internal/ir" ) -func MergeWithPatch[T client.Object](original T, patch *egv1a1.KubernetesPatchSpec) (T, error) { +func MergeWithPatch[T any](original T, patch *egv1a1.KubernetesPatchSpec) (T, error) { if patch == nil { return original, nil } @@ -30,7 +28,7 @@ func MergeWithPatch[T client.Object](original T, patch *egv1a1.KubernetesPatchSp return mergeInternal(original, patch.Value.Raw, mergeType) } -func mergeInternal[T client.Object](original T, patchJSON []byte, mergeType egv1a1.MergeType) (T, error) { +func mergeInternal[T any](original T, patchJSON []byte, mergeType egv1a1.MergeType) (T, error) { var ( patchedJSON []byte originalJSON []byte @@ -65,7 +63,7 @@ func mergeInternal[T client.Object](original T, patchJSON []byte, mergeType egv1 return *res, nil } -func Merge[T client.Object](original, patch T, mergeType egv1a1.MergeType) (T, error) { +func Merge[T any](original, patch T, mergeType egv1a1.MergeType) (T, error) { var ( patchJSON []byte err error @@ -78,52 +76,3 @@ func Merge[T client.Object](original, patch T, mergeType egv1a1.MergeType) (T, e } return mergeInternal(original, patchJSON, mergeType) } - -func mergeRLInternal[T *ir.RateLimit](original T, patchJSON []byte, mergeType egv1a1.MergeType) (T, error) { - var ( - patchedJSON []byte - originalJSON []byte - err error - empty T - ) - - originalJSON, err = json.Marshal(original) - if err != nil { - return empty, fmt.Errorf("error marshaling original service: %w", err) - } - switch mergeType { - case egv1a1.StrategicMerge: - patchedJSON, err = strategicpatch.StrategicMergePatch(originalJSON, patchJSON, empty) - if err != nil { - return empty, fmt.Errorf("error during strategic merge: %w", err) - } - case egv1a1.JSONMerge: - patchedJSON, err = jsonpatch.MergePatch(originalJSON, patchJSON) - if err != nil { - return empty, fmt.Errorf("error during JSON merge: %w", err) - } - default: - return empty, fmt.Errorf("unsupported merge type: %v", mergeType) - } - - res := new(T) - if err = json.Unmarshal(patchedJSON, res); err != nil { - return empty, fmt.Errorf("error unmarshaling patched service: %w", err) - } - - return *res, nil -} - -func MergeRL[T *ir.RateLimit](original, patch T, mergeType egv1a1.MergeType) (T, error) { - var ( - patchJSON []byte - err error - empty T - ) - - patchJSON, err = json.Marshal(patch) - if err != nil { - return empty, fmt.Errorf("error marshaling original service: %w", err) - } - return mergeRLInternal(original, patchJSON, mergeType) -}