Skip to content

Commit 38e9146

Browse files
ziraindavem-git
authored andcommitted
chore: utils.Merge (envoyproxy#6074)
* chore: utils.Merge Signed-off-by: zirain <[email protected]> * lint Signed-off-by: zirain <[email protected]> --------- Signed-off-by: zirain <[email protected]>
1 parent 3a53e0f commit 38e9146

File tree

2 files changed

+4
-55
lines changed

2 files changed

+4
-55
lines changed

internal/gatewayapi/backendtrafficpolicy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ func (t *Translator) translateBackendTrafficPolicyForRouteWithMerge(
447447
if tfGW != nil && tfRoute != nil &&
448448
tfGW.RateLimit != nil && tfRoute.RateLimit != nil {
449449

450-
mergedRL, err := utils.MergeRL(tfGW.RateLimit, tfRoute.RateLimit, *policy.Spec.MergeType)
450+
mergedRL, err := utils.Merge(tfGW.RateLimit, tfRoute.RateLimit, *policy.Spec.MergeType)
451451
if err != nil {
452452
return fmt.Errorf("error merging rate limits: %w", err)
453453
}

internal/utils/merge.go

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,11 @@ import (
1111

1212
jsonpatch "github.com/evanphx/json-patch"
1313
"k8s.io/apimachinery/pkg/util/strategicpatch"
14-
"sigs.k8s.io/controller-runtime/pkg/client"
1514

1615
egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
17-
"github.com/envoyproxy/gateway/internal/ir"
1816
)
1917

20-
func MergeWithPatch[T client.Object](original T, patch *egv1a1.KubernetesPatchSpec) (T, error) {
18+
func MergeWithPatch[T any](original T, patch *egv1a1.KubernetesPatchSpec) (T, error) {
2119
if patch == nil {
2220
return original, nil
2321
}
@@ -30,7 +28,7 @@ func MergeWithPatch[T client.Object](original T, patch *egv1a1.KubernetesPatchSp
3028
return mergeInternal(original, patch.Value.Raw, mergeType)
3129
}
3230

33-
func mergeInternal[T client.Object](original T, patchJSON []byte, mergeType egv1a1.MergeType) (T, error) {
31+
func mergeInternal[T any](original T, patchJSON []byte, mergeType egv1a1.MergeType) (T, error) {
3432
var (
3533
patchedJSON []byte
3634
originalJSON []byte
@@ -65,7 +63,7 @@ func mergeInternal[T client.Object](original T, patchJSON []byte, mergeType egv1
6563
return *res, nil
6664
}
6765

68-
func Merge[T client.Object](original, patch T, mergeType egv1a1.MergeType) (T, error) {
66+
func Merge[T any](original, patch T, mergeType egv1a1.MergeType) (T, error) {
6967
var (
7068
patchJSON []byte
7169
err error
@@ -78,52 +76,3 @@ func Merge[T client.Object](original, patch T, mergeType egv1a1.MergeType) (T, e
7876
}
7977
return mergeInternal(original, patchJSON, mergeType)
8078
}
81-
82-
func mergeRLInternal[T *ir.RateLimit](original T, patchJSON []byte, mergeType egv1a1.MergeType) (T, error) {
83-
var (
84-
patchedJSON []byte
85-
originalJSON []byte
86-
err error
87-
empty T
88-
)
89-
90-
originalJSON, err = json.Marshal(original)
91-
if err != nil {
92-
return empty, fmt.Errorf("error marshaling original service: %w", err)
93-
}
94-
switch mergeType {
95-
case egv1a1.StrategicMerge:
96-
patchedJSON, err = strategicpatch.StrategicMergePatch(originalJSON, patchJSON, empty)
97-
if err != nil {
98-
return empty, fmt.Errorf("error during strategic merge: %w", err)
99-
}
100-
case egv1a1.JSONMerge:
101-
patchedJSON, err = jsonpatch.MergePatch(originalJSON, patchJSON)
102-
if err != nil {
103-
return empty, fmt.Errorf("error during JSON merge: %w", err)
104-
}
105-
default:
106-
return empty, fmt.Errorf("unsupported merge type: %v", mergeType)
107-
}
108-
109-
res := new(T)
110-
if err = json.Unmarshal(patchedJSON, res); err != nil {
111-
return empty, fmt.Errorf("error unmarshaling patched service: %w", err)
112-
}
113-
114-
return *res, nil
115-
}
116-
117-
func MergeRL[T *ir.RateLimit](original, patch T, mergeType egv1a1.MergeType) (T, error) {
118-
var (
119-
patchJSON []byte
120-
err error
121-
empty T
122-
)
123-
124-
patchJSON, err = json.Marshal(patch)
125-
if err != nil {
126-
return empty, fmt.Errorf("error marshaling original service: %w", err)
127-
}
128-
return mergeRLInternal(original, patchJSON, mergeType)
129-
}

0 commit comments

Comments
 (0)