code: func (i *defaultUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runtime.Object) (runtime.Object, error) {
  	var err error
  	// Start with the configured object
  	newObj := i.obj
  
  	// If the original is non-nil (might be nil if the first transformer builds the object from the oldObj), make a copy,
  	// so we don't return the original. BeforeUpdate can mutate the returned object, doing things like clearing ResourceVersion.
  	// If we're re-called, we need to be able to return the pristine version.
  	if newObj != nil {
  		newObj = newObj.DeepCopyObject()
  	}
  
  	// Allow any configured transformers to update the new object
  	for _, transformer := range i.transformers {
  		newObj, err = transformer(ctx, newObj, oldObj)
  		if err != nil {
  			return nil, err
  		}
  	}
  
  	return newObj, nil
  }
docs: // UpdatedObject satisfies the UpdatedObjectInfo interface.
  // It returns a copy of the held obj, passed through any configured transformers.