From 58715527aa0efca27b870c2f51257122e8a256f0 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 29 Oct 2014 12:10:55 -0400 Subject: [PATCH] Make DataVersionAndKind public on runtime.Scheme Add a new ObjectTyper interface that clients can depend on for converting between data and object to version and kind. --- pkg/runtime/interfaces.go | 7 +++++++ pkg/runtime/scheme.go | 6 ++++++ pkg/runtime/scheme_test.go | 3 +++ 3 files changed, 16 insertions(+) diff --git a/pkg/runtime/interfaces.go b/pkg/runtime/interfaces.go index 5d5e725d68..c019518d60 100644 --- a/pkg/runtime/interfaces.go +++ b/pkg/runtime/interfaces.go @@ -33,6 +33,13 @@ type Codec interface { Encoder } +// ObjectTyper contains methods for extracting the APIVersion and Kind +// of objects. +type ObjectTyper interface { + DataVersionAndKind([]byte) (version, kind string, err error) + ObjectVersionAndKind(Object) (version, kind string, err error) +} + // ResourceVersioner provides methods for setting and retrieving // the resource version from an API object. type ResourceVersioner interface { diff --git a/pkg/runtime/scheme.go b/pkg/runtime/scheme.go index 08458961b9..cfd647919c 100644 --- a/pkg/runtime/scheme.go +++ b/pkg/runtime/scheme.go @@ -174,6 +174,12 @@ func (s *Scheme) KnownTypes(version string) map[string]reflect.Type { return s.raw.KnownTypes(version) } +// DataVersionAndKind will return the APIVersion and Kind of the given wire-format +// enconding of an API Object, or an error. +func (s *Scheme) DataVersionAndKind(data []byte) (version, kind string, err error) { + return s.raw.DataVersionAndKind(data) +} + // ObjectVersionAndKind returns the version and kind of the given Object. func (s *Scheme) ObjectVersionAndKind(obj Object) (version, kind string, err error) { return s.raw.ObjectVersionAndKind(obj) diff --git a/pkg/runtime/scheme_test.go b/pkg/runtime/scheme_test.go index dd5a59418a..36aac48e3c 100644 --- a/pkg/runtime/scheme_test.go +++ b/pkg/runtime/scheme_test.go @@ -47,6 +47,9 @@ func TestScheme(t *testing.T) { scheme.AddKnownTypeWithName("", "Simple", &InternalSimple{}) scheme.AddKnownTypeWithName("externalVersion", "Simple", &ExternalSimple{}) + // test that scheme is an ObjectTyper + var _ runtime.ObjectTyper = scheme + internalToExternalCalls := 0 externalToInternalCalls := 0