@@ -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