code: func NewCodec(
  	encoder runtime.Encoder,
  	decoder runtime.Decoder,
  	convertor runtime.ObjectConvertor,
  	creater runtime.ObjectCreater,
  	typer runtime.ObjectTyper,
  	defaulter runtime.ObjectDefaulter,
  	encodeVersion runtime.GroupVersioner,
  	decodeVersion runtime.GroupVersioner,
  	originalSchemeName string,
  ) runtime.Codec {
  	internal := &codec{
  		encoder:   encoder,
  		decoder:   decoder,
  		convertor: convertor,
  		creater:   creater,
  		typer:     typer,
  		defaulter: defaulter,
  
  		encodeVersion: encodeVersion,
  		decodeVersion: decodeVersion,
  
  		originalSchemeName: originalSchemeName,
  	}
  	return internal
  }
docs: // NewCodec takes objects in their internal versions and converts them to external versions before
  // serializing them. It assumes the serializer provided to it only deals with external versions.
  // This class is also a serializer, but is generally used with a specific version.