request/unstructuredscheme/serializer.go (72 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. package unstructuredscheme import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/json" ) var ( scheme = runtime.NewScheme() ) func init() { metav1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) } func NewNegotiatedSerializer() runtime.NegotiatedSerializer { return &negotiatedSerializer{} } type negotiatedSerializer struct{} func (s negotiatedSerializer) SupportedMediaTypes() []runtime.SerializerInfo { return []runtime.SerializerInfo{ { MediaType: "application/json", MediaTypeType: "application", MediaTypeSubType: "json", EncodesAsText: true, Serializer: json.NewSerializer(json.DefaultMetaFactory, creator{scheme}, typer{scheme}, false), StreamSerializer: &runtime.StreamSerializerInfo{ EncodesAsText: true, Serializer: json.NewSerializer(json.DefaultMetaFactory, scheme, scheme, false), Framer: json.Framer, }, }, } } func (s negotiatedSerializer) EncoderForVersion(encoder runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder { return runtime.WithVersionEncoder{ Version: gv, Encoder: encoder, ObjectTyper: typer{scheme}, } } func (s negotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, _ runtime.GroupVersioner) runtime.Decoder { return decoder } type creator struct { objCreator runtime.ObjectCreater } func (c creator) New(kind schema.GroupVersionKind) (runtime.Object, error) { obj, err := c.objCreator.New(kind) if err == nil { return obj, nil } obj = &unstructured.Unstructured{} obj.GetObjectKind().SetGroupVersionKind(kind) return obj, nil } type typer struct { typer runtime.ObjectTyper } func (t typer) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) { kinds, unversioned, err := t.typer.ObjectKinds(obj) if err == nil { return kinds, unversioned, nil } if _, ok := obj.(runtime.Unstructured); ok && !obj.GetObjectKind().GroupVersionKind().Empty() { return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil } return nil, false, err } func (t typer) Recognizes(_ schema.GroupVersionKind) bool { return true }