diff --git a/pkg/runtime/scheme.go b/pkg/runtime/scheme.go index 64cacb6d8b1..1e22560a6d3 100644 --- a/pkg/runtime/scheme.go +++ b/pkg/runtime/scheme.go @@ -34,36 +34,12 @@ type Scheme struct { raw *conversion.Scheme } -var namedSchemes map[string]*Scheme - -// GetScheme returns the scheme with the given name, creating it if necessary. -// Important: You may not modify the returned *Scheme except from init() functions. -func GetScheme(schemeName string) *Scheme { - if namedSchemes == nil { - namedSchemes = map[string]*Scheme{} - } - if s, ok := namedSchemes[schemeName]; ok { - return s - } - s := NewScheme("", "") - namedSchemes[schemeName] = s - return s -} - // fromScope gets the input version, desired output version, and desired Scheme // from a conversion.Scope. func fromScope(s conversion.Scope) (inVersion, outVersion string, scheme *Scheme) { scheme = DefaultScheme inVersion = s.Meta().SrcVersion outVersion = s.Meta().DestVersion - // If a scheme tag was provided, use it. Look at the struct tag corresponding - // to version "". - if name := s.SrcTag().Get("scheme"); inVersion == "" && name != "" { - scheme = GetScheme(name) - } - if name := s.DestTag().Get("scheme"); outVersion == "" && name != "" { - scheme = GetScheme(name) - } return inVersion, outVersion, scheme } diff --git a/pkg/runtime/scheme_test.go b/pkg/runtime/scheme_test.go index 34a3fcf83a5..c317c6f7efa 100644 --- a/pkg/runtime/scheme_test.go +++ b/pkg/runtime/scheme_test.go @@ -153,28 +153,22 @@ type ExternalExtensionType struct { } type InternalExtensionType struct { - JSONBase `json:",inline" yaml:",inline"` - Extension runtime.EmbeddedObject `json:"extension" yaml:"extension" scheme:"testExtension"` -} - -type InternalExtensionTypeNoScheme struct { JSONBase `json:",inline" yaml:",inline"` Extension runtime.EmbeddedObject `json:"extension" yaml:"extension"` } -func (*ExtensionA) IsAnAPIObject() {} -func (*ExtensionB) IsAnAPIObject() {} -func (*ExternalExtensionType) IsAnAPIObject() {} -func (*InternalExtensionType) IsAnAPIObject() {} -func (*InternalExtensionTypeNoScheme) IsAnAPIObject() {} +func (*ExtensionA) IsAnAPIObject() {} +func (*ExtensionB) IsAnAPIObject() {} +func (*ExternalExtensionType) IsAnAPIObject() {} +func (*InternalExtensionType) IsAnAPIObject() {} -func TestExtensionMappingWithScheme(t *testing.T) { +func TestExtensionMapping(t *testing.T) { runtime.DefaultScheme.AddKnownTypeWithName("", "ExtensionType", &InternalExtensionType{}) - runtime.GetScheme("testExtension").AddKnownTypeWithName("", "A", &ExtensionA{}) - runtime.GetScheme("testExtension").AddKnownTypeWithName("", "B", &ExtensionB{}) + runtime.DefaultScheme.AddKnownTypeWithName("", "A", &ExtensionA{}) + runtime.DefaultScheme.AddKnownTypeWithName("", "B", &ExtensionB{}) runtime.DefaultScheme.AddKnownTypeWithName("testExternal", "ExtensionType", &ExternalExtensionType{}) - runtime.GetScheme("testExtension").AddKnownTypeWithName("testExternal", "A", &ExtensionA{}) - runtime.GetScheme("testExtension").AddKnownTypeWithName("testExternal", "B", &ExtensionB{}) + runtime.DefaultScheme.AddKnownTypeWithName("testExternal", "A", &ExtensionA{}) + runtime.DefaultScheme.AddKnownTypeWithName("testExternal", "B", &ExtensionB{}) table := []struct { obj runtime.Object @@ -215,43 +209,3 @@ func TestExtensionMappingWithScheme(t *testing.T) { } } } - -func TestExtensionMappingWithoutScheme(t *testing.T) { - runtime.DefaultScheme.AddKnownTypeWithName("", "ExtensionType", &InternalExtensionTypeNoScheme{}) - runtime.DefaultScheme.AddKnownTypeWithName("", "ExA", &ExtensionA{}) - runtime.DefaultScheme.AddKnownTypeWithName("testExternal", "ExtensionType", &ExternalExtensionType{}) - runtime.DefaultScheme.AddKnownTypeWithName("testExternal", "ExA", &ExtensionA{}) - - table := []struct { - obj runtime.Object - encoded string - }{ - { - &InternalExtensionTypeNoScheme{Extension: runtime.EmbeddedObject{&ExtensionA{TestString: "foo"}}}, - `{"kind":"ExtensionType","apiVersion":"testExternal","extension":{"kind":"ExA","testString":"foo"}}`, - }, - } - - for _, item := range table { - gotEncoded, err := runtime.DefaultScheme.EncodeToVersion(item.obj, "testExternal") - if err != nil { - t.Errorf("unexpected error '%v' (%#v)", err, item.obj) - } else if e, a := item.encoded, string(gotEncoded); e != a { - t.Errorf("expected %v, got %v", e, a) - } - - gotDecoded, err := runtime.DefaultScheme.Decode([]byte(item.encoded)) - if err != nil { - t.Errorf("unexpected error '%v' (%v)", err, item.encoded) - } else if e, a := item.obj, gotDecoded; !reflect.DeepEqual(e, a) { - var eEx, aEx runtime.Object - if obj, ok := e.(*InternalExtensionTypeNoScheme); ok { - eEx = obj.Extension.Object - } - if obj, ok := a.(*InternalExtensionTypeNoScheme); ok { - aEx = obj.Extension.Object - } - t.Errorf("expected %#v, got %#v (%#v, %#v)", e, a, eEx, aEx) - } - } -} diff --git a/pkg/runtime/types.go b/pkg/runtime/types.go index c361906d2cb..b7ec6a0e169 100644 --- a/pkg/runtime/types.go +++ b/pkg/runtime/types.go @@ -72,8 +72,7 @@ type EmbeddedObject struct { // // Internal package: // type MyAPIObject struct { // runtime.JSONBase `yaml:",inline" json:",inline"` -// // The "scheme" tag is optional; if absent, runtime.DefaultScheme will be used. -// MyPlugin runtime.EmbeddedObject `scheme:"pluginScheme"` +// MyPlugin runtime.EmbeddedObject `json:"myPlugin" yaml:"myPlugin"` // } // type PluginA struct { // runtime.PluginBase `yaml:",inline" json:",inline"`