// 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: _

// Identifier represents an identifier.
// Identitier of two different objects should be equal if and only if for every
// input the output they produce is exactly the same.
#Identifier: string // #enumIdentifier

#enumIdentifier:
	_#noopEncoderIdentifier

// 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

	// StrictSerializer, if set, deserializes this object strictly,
	// erring on unknown fields.
	StrictSerializer: #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: _

// ClientNegotiator handles turning an HTTP content type into the appropriate encoder.
// Use NewClientNegotiator or NewVersionedClientNegotiator to create this interface from
// a NegotiatedSerializer.
#ClientNegotiator: _

// 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: _

// CacheableObject allows an object to cache its different serializations
// to avoid performing the same serialization multiple times.
#CacheableObject: _

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