github.com/spotmaxtech/k8s-apimachinery-v0260@v0.0.1/pkg/apis/meta/v1/unstructured/unstructuredscheme/scheme.go (about) 1 /* 2 Copyright 2018 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package unstructuredscheme 18 19 import ( 20 "fmt" 21 22 "github.com/spotmaxtech/k8s-apimachinery-v0260/pkg/apis/meta/v1/unstructured" 23 "github.com/spotmaxtech/k8s-apimachinery-v0260/pkg/runtime" 24 "github.com/spotmaxtech/k8s-apimachinery-v0260/pkg/runtime/schema" 25 "github.com/spotmaxtech/k8s-apimachinery-v0260/pkg/runtime/serializer/json" 26 "github.com/spotmaxtech/k8s-apimachinery-v0260/pkg/runtime/serializer/versioning" 27 ) 28 29 var scheme = runtime.NewScheme() 30 31 // NewUnstructuredNegotiatedSerializer returns a simple, negotiated serializer 32 func NewUnstructuredNegotiatedSerializer() runtime.NegotiatedSerializer { 33 return unstructuredNegotiatedSerializer{ 34 scheme: scheme, 35 typer: NewUnstructuredObjectTyper(), 36 creator: NewUnstructuredCreator(), 37 } 38 } 39 40 type unstructuredNegotiatedSerializer struct { 41 scheme *runtime.Scheme 42 typer runtime.ObjectTyper 43 creator runtime.ObjectCreater 44 } 45 46 func (s unstructuredNegotiatedSerializer) SupportedMediaTypes() []runtime.SerializerInfo { 47 return []runtime.SerializerInfo{ 48 { 49 MediaType: "application/json", 50 MediaTypeType: "application", 51 MediaTypeSubType: "json", 52 EncodesAsText: true, 53 Serializer: json.NewSerializer(json.DefaultMetaFactory, s.creator, s.typer, false), 54 PrettySerializer: json.NewSerializer(json.DefaultMetaFactory, s.creator, s.typer, true), 55 StreamSerializer: &runtime.StreamSerializerInfo{ 56 EncodesAsText: true, 57 Serializer: json.NewSerializer(json.DefaultMetaFactory, s.creator, s.typer, false), 58 Framer: json.Framer, 59 }, 60 }, 61 { 62 MediaType: "application/yaml", 63 MediaTypeType: "application", 64 MediaTypeSubType: "yaml", 65 EncodesAsText: true, 66 Serializer: json.NewYAMLSerializer(json.DefaultMetaFactory, s.creator, s.typer), 67 }, 68 } 69 } 70 71 func (s unstructuredNegotiatedSerializer) EncoderForVersion(encoder runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder { 72 return versioning.NewDefaultingCodecForScheme(s.scheme, encoder, nil, gv, nil) 73 } 74 75 func (s unstructuredNegotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder { 76 return versioning.NewDefaultingCodecForScheme(s.scheme, nil, decoder, nil, gv) 77 } 78 79 type unstructuredObjectTyper struct { 80 } 81 82 // NewUnstructuredObjectTyper returns an object typer that can deal with unstructured things 83 func NewUnstructuredObjectTyper() runtime.ObjectTyper { 84 return unstructuredObjectTyper{} 85 } 86 87 func (t unstructuredObjectTyper) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) { 88 // Delegate for things other than Unstructured. 89 if _, ok := obj.(runtime.Unstructured); !ok { 90 return nil, false, fmt.Errorf("cannot type %T", obj) 91 } 92 gvk := obj.GetObjectKind().GroupVersionKind() 93 if len(gvk.Kind) == 0 { 94 return nil, false, runtime.NewMissingKindErr("object has no kind field ") 95 } 96 if len(gvk.Version) == 0 { 97 return nil, false, runtime.NewMissingVersionErr("object has no apiVersion field") 98 } 99 100 return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil 101 } 102 103 func (t unstructuredObjectTyper) Recognizes(gvk schema.GroupVersionKind) bool { 104 return true 105 } 106 107 type unstructuredCreator struct{} 108 109 // NewUnstructuredCreator returns a simple object creator that always returns an unstructured 110 func NewUnstructuredCreator() runtime.ObjectCreater { 111 return unstructuredCreator{} 112 } 113 114 func (c unstructuredCreator) New(kind schema.GroupVersionKind) (runtime.Object, error) { 115 ret := &unstructured.Unstructured{} 116 ret.SetGroupVersionKind(kind) 117 return ret, nil 118 } 119 120 type unstructuredDefaulter struct { 121 } 122 123 // NewUnstructuredDefaulter returns defaulter suitable for unstructured types that doesn't default anything 124 func NewUnstructuredDefaulter() runtime.ObjectDefaulter { 125 return unstructuredDefaulter{} 126 } 127 128 func (d unstructuredDefaulter) Default(in runtime.Object) { 129 }