update decoder to use GroupVersion
This commit is contained in:
@@ -35,6 +35,7 @@ type yamlCodec struct {
|
||||
|
||||
// yamlCodec implements Codec
|
||||
var _ Codec = yamlCodec{}
|
||||
var _ Decoder = yamlCodec{}
|
||||
|
||||
// YAMLDecoder adds YAML decoding support to a codec that supports JSON.
|
||||
func YAMLDecoder(codec Codec) Codec {
|
||||
@@ -75,6 +76,8 @@ type codecWrapper struct {
|
||||
version string
|
||||
}
|
||||
|
||||
var _ Decoder = &codecWrapper{}
|
||||
|
||||
// Encode implements Codec
|
||||
func (c *codecWrapper) Encode(obj Object) ([]byte, error) {
|
||||
return c.EncodeToVersion(obj, c.version)
|
||||
|
@@ -19,6 +19,8 @@ package runtime
|
||||
import (
|
||||
"io"
|
||||
"net/url"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
)
|
||||
|
||||
// Codec defines methods for serializing and deserializing API objects.
|
||||
@@ -31,10 +33,10 @@ type Codec interface {
|
||||
type Decoder interface {
|
||||
Decode(data []byte) (Object, error)
|
||||
// TODO: Remove this method?
|
||||
DecodeToVersion(data []byte, version string) (Object, error)
|
||||
DecodeToVersion(data []byte, groupVersion unversioned.GroupVersion) (Object, error)
|
||||
DecodeInto(data []byte, obj Object) error
|
||||
// TODO: Remove this method?
|
||||
DecodeIntoWithSpecifiedVersionKind(data []byte, obj Object, kind, version string) error
|
||||
DecodeIntoWithSpecifiedVersionKind(data []byte, obj Object, groupVersionKind unversioned.GroupVersionKind) error
|
||||
|
||||
DecodeParametersInto(parameters url.Values, obj Object) error
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ import (
|
||||
"net/url"
|
||||
"reflect"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/conversion"
|
||||
)
|
||||
|
||||
@@ -35,6 +36,8 @@ type Scheme struct {
|
||||
fieldLabelConversionFuncs map[string]map[string]FieldLabelConversionFunc
|
||||
}
|
||||
|
||||
var _ Decoder = &Scheme{}
|
||||
|
||||
// Function to convert a field selector to internal representation.
|
||||
type FieldLabelConversionFunc func(label, value string) (internalLabel, internalValue string, err error)
|
||||
|
||||
@@ -456,8 +459,8 @@ func (s *Scheme) Decode(data []byte) (Object, error) {
|
||||
// are set by Encode. Only versioned objects (APIVersion != "") are
|
||||
// accepted. The object will be converted into the in-memory versioned type
|
||||
// requested before being returned.
|
||||
func (s *Scheme) DecodeToVersion(data []byte, version string) (Object, error) {
|
||||
obj, err := s.raw.DecodeToVersion(data, version)
|
||||
func (s *Scheme) DecodeToVersion(data []byte, gv unversioned.GroupVersion) (Object, error) {
|
||||
obj, err := s.raw.DecodeToVersion(data, gv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -476,8 +479,8 @@ func (s *Scheme) DecodeInto(data []byte, obj Object) error {
|
||||
return s.raw.DecodeInto(data, obj)
|
||||
}
|
||||
|
||||
func (s *Scheme) DecodeIntoWithSpecifiedVersionKind(data []byte, obj Object, version, kind string) error {
|
||||
return s.raw.DecodeIntoWithSpecifiedVersionKind(data, obj, version, kind)
|
||||
func (s *Scheme) DecodeIntoWithSpecifiedVersionKind(data []byte, obj Object, gvk unversioned.GroupVersionKind) error {
|
||||
return s.raw.DecodeIntoWithSpecifiedVersionKind(data, obj, gvk)
|
||||
}
|
||||
|
||||
func (s *Scheme) DecodeParametersInto(parameters url.Values, obj Object) error {
|
||||
|
@@ -20,6 +20,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/conversion"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
)
|
||||
@@ -43,9 +44,12 @@ func (*InternalSimple) IsAnAPIObject() {}
|
||||
func (*ExternalSimple) IsAnAPIObject() {}
|
||||
|
||||
func TestScheme(t *testing.T) {
|
||||
internalGVK := unversioned.GroupVersionKind{Group: "test.group", Version: "", Kind: "Simple"}
|
||||
externalGVK := unversioned.GroupVersionKind{Group: "test.group", Version: "externalVersion", Kind: "Simple"}
|
||||
|
||||
scheme := runtime.NewScheme()
|
||||
scheme.AddKnownTypeWithName("", "Simple", &InternalSimple{})
|
||||
scheme.AddKnownTypeWithName("externalVersion", "Simple", &ExternalSimple{})
|
||||
scheme.AddKnownTypeWithName(internalGVK.GroupVersion().String(), internalGVK.Kind, &InternalSimple{})
|
||||
scheme.AddKnownTypeWithName(externalGVK.GroupVersion().String(), externalGVK.Kind, &ExternalSimple{})
|
||||
|
||||
// test that scheme is an ObjectTyper
|
||||
var _ runtime.ObjectTyper = scheme
|
||||
@@ -56,10 +60,10 @@ func TestScheme(t *testing.T) {
|
||||
// Register functions to verify that scope.Meta() gets set correctly.
|
||||
err := scheme.AddConversionFuncs(
|
||||
func(in *InternalSimple, out *ExternalSimple, scope conversion.Scope) error {
|
||||
if e, a := "", scope.Meta().SrcVersion; e != a {
|
||||
if e, a := internalGVK.GroupVersion().String(), scope.Meta().SrcVersion; e != a {
|
||||
t.Errorf("Expected '%v', got '%v'", e, a)
|
||||
}
|
||||
if e, a := "externalVersion", scope.Meta().DestVersion; e != a {
|
||||
if e, a := externalGVK.GroupVersion().String(), scope.Meta().DestVersion; e != a {
|
||||
t.Errorf("Expected '%v', got '%v'", e, a)
|
||||
}
|
||||
scope.Convert(&in.TypeMeta, &out.TypeMeta, 0)
|
||||
@@ -68,10 +72,10 @@ func TestScheme(t *testing.T) {
|
||||
return nil
|
||||
},
|
||||
func(in *ExternalSimple, out *InternalSimple, scope conversion.Scope) error {
|
||||
if e, a := "externalVersion", scope.Meta().SrcVersion; e != a {
|
||||
if e, a := externalGVK.GroupVersion().String(), scope.Meta().SrcVersion; e != a {
|
||||
t.Errorf("Expected '%v', got '%v'", e, a)
|
||||
}
|
||||
if e, a := "", scope.Meta().DestVersion; e != a {
|
||||
if e, a := internalGVK.GroupVersion().String(), scope.Meta().DestVersion; e != a {
|
||||
t.Errorf("Expected '%v', got '%v'", e, a)
|
||||
}
|
||||
scope.Convert(&in.TypeMeta, &out.TypeMeta, 0)
|
||||
@@ -93,7 +97,7 @@ func TestScheme(t *testing.T) {
|
||||
obj2, err2 := scheme.Decode(data)
|
||||
obj3 := &InternalSimple{}
|
||||
err3 := scheme.DecodeInto(data, obj3)
|
||||
obj4, err4 := scheme.DecodeToVersion(data, "externalVersion")
|
||||
obj4, err4 := scheme.DecodeToVersion(data, externalGVK.GroupVersion())
|
||||
if err != nil || err2 != nil || err3 != nil || err4 != nil {
|
||||
t.Fatalf("Failure: '%v' '%v' '%v' '%v'", err, err2, err3, err4)
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@ import (
|
||||
"net/url"
|
||||
"reflect"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/conversion"
|
||||
)
|
||||
|
||||
@@ -31,6 +32,8 @@ var UnstructuredJSONScheme ObjectDecoder = unstructuredJSONScheme{}
|
||||
|
||||
type unstructuredJSONScheme struct{}
|
||||
|
||||
var _ Decoder = unstructuredJSONScheme{}
|
||||
|
||||
// Recognizes returns true for any version or kind that is specified (internal
|
||||
// versions are specifically excluded).
|
||||
func (unstructuredJSONScheme) Recognizes(version, kind string) bool {
|
||||
@@ -75,11 +78,11 @@ func (unstructuredJSONScheme) DecodeInto(data []byte, obj Object) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (unstructuredJSONScheme) DecodeIntoWithSpecifiedVersionKind(data []byte, obj Object, kind, version string) error {
|
||||
func (unstructuredJSONScheme) DecodeIntoWithSpecifiedVersionKind(data []byte, obj Object, gvk unversioned.GroupVersionKind) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (unstructuredJSONScheme) DecodeToVersion(data []byte, version string) (Object, error) {
|
||||
func (unstructuredJSONScheme) DecodeToVersion(data []byte, gv unversioned.GroupVersion) (Object, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user