@@ -135,7 +135,7 @@ type ClientBuilder struct {
135135 withStatusSubresource []client.Object
136136 objectTracker testing.ObjectTracker
137137 interceptorFuncs * interceptor.Funcs
138- typeConverters [] managedfields.TypeConverter
138+ typeConverter managedfields.TypeConverter
139139
140140 // indexes maps each GroupVersionKind (GVK) to the indexes registered for that GVK.
141141 // The inner map maps from index name to IndexerFunc.
@@ -243,7 +243,14 @@ func (f *ClientBuilder) WithInterceptorFuncs(interceptorFuncs interceptor.Funcs)
243243// * clientgoapplyconfigurations.NewTypeConverter(clientgoscheme.Scheme),
244244// * managedfields.NewDeducedTypeConverter(),
245245func (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+
247254 return f
248255}
249256
@@ -267,23 +274,25 @@ func (f *ClientBuilder) Build() client.WithWatch {
267274 withStatusSubResource .Insert (gvk )
268275 }
269276
270- if f .objectTracker != nil && len ( f . typeConverters ) > 0 {
277+ if f .objectTracker != nil && f . typeConverter != nil {
271278 panic (errors .New ("WithObjectTracker and WithTypeConverters are incompatible" ))
272279 }
273280
274281 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+ },
281290 }
282291 }
283292 f .objectTracker = testing .NewFieldManagedObjectTracker (
284293 f .scheme ,
285294 serializer .NewCodecFactory (f .scheme ).UniversalDecoder (),
286- multiTypeConverter { upstream : f . typeConverters } ,
295+ f . typeConverter ,
287296 )
288297 }
289298 tracker = versionedTracker {
0 commit comments