// Code generated by cue get go. DO NOT EDIT.

//cue:generate cue get go k8s.io/apimachinery/pkg/runtime

package runtime

// APIVersionInternal may be used if you are registering a type that should not
// be considered stable or serialized - it is a convention only and has no
// special behavior in this package.
APIVersionInternal :: "__internal"

// GroupVersioner refines a set of possible conversion targets into a single option.
GroupVersioner :: _

// Encoder writes objects to a serialized form
Encoder :: _

// Decoder attempts to load an object from data.
Decoder :: _

// Serializer is the core interface for transforming objects into a serialized format and back.
// Implementations may choose to perform conversion of the object, but no assumptions should be made.
Serializer :: _

// Codec is a Serializer that deals with the details of versioning objects. It offers the same
// interface as Serializer, so this is a marker to consumers that care about the version of the objects
// they receive.
Codec :: Serializer

// ParameterCodec defines methods for serializing and deserializing API objects to url.Values and
// performing any necessary conversion. Unlike the normal Codec, query parameters are not self describing
// and the desired version must be specified.
ParameterCodec :: _

// Framer is a factory for creating readers and writers that obey a particular framing pattern.
Framer :: _

// SerializerInfo contains information about a specific serialization format
SerializerInfo :: {
	// MediaType is the value that represents this serializer over the wire.
	MediaType: string

	// MediaTypeType is the first part of the MediaType ("application" in "application/json").
	MediaTypeType: string

	// MediaTypeSubType is the second part of the MediaType ("json" in "application/json").
	MediaTypeSubType: string

	// EncodesAsText indicates this serializer can be encoded to UTF-8 safely.
	EncodesAsText: bool

	// Serializer is the individual object serializer for this media type.
	Serializer: Serializer

	// PrettySerializer, if set, can serialize this object in a form biased towards
	// readability.
	PrettySerializer: Serializer

	// StreamSerializer, if set, describes the streaming serialization format
	// for this media type.
	StreamSerializer: null | StreamSerializerInfo @go(,*StreamSerializerInfo)
}

// StreamSerializerInfo contains information about a specific stream serialization format
StreamSerializerInfo :: {
	// EncodesAsText indicates this serializer can be encoded to UTF-8 safely.
	EncodesAsText: bool

	// Serializer is the top level object serializer for this type when streaming
	Serializer: Serializer

	// Framer is the factory for retrieving streams that separate objects on the wire
	Framer: Framer
}

// NegotiatedSerializer is an interface used for obtaining encoders, decoders, and serializers
// for multiple supported media types. This would commonly be accepted by a server component
// that performs HTTP content negotiation to accept multiple formats.
NegotiatedSerializer :: _

// StorageSerializer is an interface used for obtaining encoders, decoders, and serializers
// that can read and write data at rest. This would commonly be used by client tools that must
// read files, or server side storage interfaces that persist restful objects.
StorageSerializer :: _

// NestedObjectEncoder is an optional interface that objects may implement to be given
// an opportunity to encode any nested Objects / RawExtensions during serialization.
NestedObjectEncoder :: _

// NestedObjectDecoder is an optional interface that objects may implement to be given
// an opportunity to decode any nested Objects / RawExtensions during serialization.
NestedObjectDecoder :: _

ObjectDefaulter :: _

ObjectVersioner :: _

// ObjectConvertor converts an object to a different version.
ObjectConvertor :: _

// ObjectTyper contains methods for extracting the APIVersion and Kind
// of objects.
ObjectTyper :: _

// ObjectCreater contains methods for instantiating an object by kind and version.
ObjectCreater :: _

// EquivalentResourceMapper provides information about resources that address the same underlying data as a specified resource
EquivalentResourceMapper :: _

// EquivalentResourceRegistry provides an EquivalentResourceMapper interface,
// and allows registering known resource[/subresource] -> kind
EquivalentResourceRegistry :: _

// ResourceVersioner provides methods for setting and retrieving
// the resource version from an API object.
ResourceVersioner :: _

// SelfLinker provides methods for setting and retrieving the SelfLink field of an API object.
SelfLinker :: _

// Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are
// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
// serializers to set the kind, version, and group the object is represented as. An Object may choose
// to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized.
Object :: _

// Unstructured objects store values as map[string]interface{}, with only values that can be serialized
// to JSON allowed.
Unstructured :: _
