@@ -135,7 +135,7 @@ type ClientBuilder struct {
135
135
withStatusSubresource []client.Object
136
136
objectTracker testing.ObjectTracker
137
137
interceptorFuncs * interceptor.Funcs
138
- typeConverters [] managedfields.TypeConverter
138
+ typeConverter managedfields.TypeConverter
139
139
140
140
// indexes maps each GroupVersionKind (GVK) to the indexes registered for that GVK.
141
141
// The inner map maps from index name to IndexerFunc.
@@ -243,7 +243,14 @@ func (f *ClientBuilder) WithInterceptorFuncs(interceptorFuncs interceptor.Funcs)
243
243
// * clientgoapplyconfigurations.NewTypeConverter(clientgoscheme.Scheme),
244
244
// * managedfields.NewDeducedTypeConverter(),
245
245
func (f * ClientBuilder ) WithTypeConverters (typeConverters ... managedfields.TypeConverter ) * ClientBuilder {
246
- f .typeConverters = append (f .typeConverters , typeConverters ... )
246
+ if f .typeConverter == nil {
247
+ f .typeConverter = & multiTypeConverter {upstream : typeConverters }
248
+ } else if multiTypeConverter , ok := f .typeConverter .(* multiTypeConverter ); ok {
249
+ multiTypeConverter .upstream = append (multiTypeConverter .upstream , typeConverters ... )
250
+ } else {
251
+ panic (fmt .Sprintf ("unexpected type converter already specified: %T; this is incompatible with WithTypeConverters" , f .typeConverter ))
252
+ }
253
+
247
254
return f
248
255
}
249
256
@@ -267,23 +274,25 @@ func (f *ClientBuilder) Build() client.WithWatch {
267
274
withStatusSubResource .Insert (gvk )
268
275
}
269
276
270
- if f .objectTracker != nil && len ( f . typeConverters ) > 0 {
277
+ if f .objectTracker != nil && f . typeConverter != nil {
271
278
panic (errors .New ("WithObjectTracker and WithTypeConverters are incompatible" ))
272
279
}
273
280
274
281
if f .objectTracker == nil {
275
- if len (f .typeConverters ) == 0 {
276
- f .typeConverters = []managedfields.TypeConverter {
277
- // Use corresponding scheme to ensure the converter error
278
- // for types it can't handle.
279
- clientgoapplyconfigurations .NewTypeConverter (clientgoscheme .Scheme ),
280
- managedfields .NewDeducedTypeConverter (),
282
+ if f .typeConverter == nil {
283
+ f .typeConverter = & multiTypeConverter {
284
+ upstream : []managedfields.TypeConverter {
285
+ // Use corresponding scheme to ensure the converter error
286
+ // for types it can't handle.
287
+ clientgoapplyconfigurations .NewTypeConverter (clientgoscheme .Scheme ),
288
+ managedfields .NewDeducedTypeConverter (),
289
+ },
281
290
}
282
291
}
283
292
f .objectTracker = testing .NewFieldManagedObjectTracker (
284
293
f .scheme ,
285
294
serializer .NewCodecFactory (f .scheme ).UniversalDecoder (),
286
- multiTypeConverter { upstream : f . typeConverters } ,
295
+ f . typeConverter ,
287
296
)
288
297
}
289
298
tracker = versionedTracker {
0 commit comments