code: func (b *Builder) WithScheme(scheme *runtime.Scheme, decodingVersions ...schema.GroupVersion) *Builder {
  	if b.mapper != nil {
  		b.errs = append(b.errs, fmt.Errorf("another mapper was already selected, cannot use internal types"))
  		return b
  	}
  	b.objectTyper = scheme
  	codecFactory := serializer.NewCodecFactory(scheme)
  	negotiatedSerializer := runtime.NegotiatedSerializer(codecFactory)
  	// if you specified versions, you're specifying a desire for external types, which you don't want to round-trip through
  	// internal types
  	if len(decodingVersions) > 0 {
  		negotiatedSerializer = codecFactory.WithoutConversion()
  	}
  	b.negotiatedSerializer = negotiatedSerializer
  
  	b.mapper = &mapper{
  		localFn:      b.isLocal,
  		restMapperFn: b.restMapperFn,
  		clientFn:     b.getClient,
  		decoder:      codecFactory.UniversalDecoder(decodingVersions...),
  	}
  
  	return b
  }
docs: // WithScheme uses the scheme to manage typing, conversion (optional), and decoding.  If decodingVersions
  // is empty, then you can end up with internal types.  You have been warned.