Add runtime.ObjectConvertor to RESTMapper

This commit is contained in:
Clayton Coleman 2014-11-02 09:31:29 -05:00
parent dc862ae463
commit f0c23d68f7
4 changed files with 15 additions and 3 deletions

View File

@ -71,11 +71,13 @@ func InterfacesFor(version string) (*meta.VersionInterfaces, error) {
case "v1beta1": case "v1beta1":
return &meta.VersionInterfaces{ return &meta.VersionInterfaces{
Codec: v1beta1.Codec, Codec: v1beta1.Codec,
ObjectConvertor: api.Scheme,
MetadataAccessor: accessor, MetadataAccessor: accessor,
}, nil }, nil
case "v1beta2": case "v1beta2":
return &meta.VersionInterfaces{ return &meta.VersionInterfaces{
Codec: v1beta2.Codec, Codec: v1beta2.Codec,
ObjectConvertor: api.Scheme,
MetadataAccessor: accessor, MetadataAccessor: accessor,
}, nil }, nil
default: default:

View File

@ -23,6 +23,7 @@ import (
// VersionInterfaces contains the interfaces one should use for dealing with types of a particular version. // VersionInterfaces contains the interfaces one should use for dealing with types of a particular version.
type VersionInterfaces struct { type VersionInterfaces struct {
runtime.Codec runtime.Codec
runtime.ObjectConvertor
MetadataAccessor MetadataAccessor
} }
@ -86,6 +87,7 @@ type RESTMapping struct {
Kind string Kind string
runtime.Codec runtime.Codec
runtime.ObjectConvertor
MetadataAccessor MetadataAccessor
} }

View File

@ -49,7 +49,7 @@ type DefaultRESTMapper struct {
interfacesFunc VersionInterfacesFunc interfacesFunc VersionInterfacesFunc
} }
// VersionInterfacesFunc returns the appropriate codec and metadata accessor for a // VersionInterfacesFunc returns the appropriate codec, typer, and metadata accessor for a
// given api version, or false if no such api version exists. // given api version, or false if no such api version exists.
type VersionInterfacesFunc func(apiVersion string) (*VersionInterfaces, bool) type VersionInterfacesFunc func(apiVersion string) (*VersionInterfaces, bool)
@ -162,6 +162,7 @@ func (m *DefaultRESTMapper) RESTMapping(version, kind string) (*RESTMapping, err
Kind: kind, Kind: kind,
Codec: interfaces.Codec, Codec: interfaces.Codec,
ObjectConvertor: interfaces.ObjectConvertor,
MetadataAccessor: interfaces.MetadataAccessor, MetadataAccessor: interfaces.MetadataAccessor,
}, nil }, nil
} }

View File

@ -36,11 +36,18 @@ func (fakeCodec) DecodeInto([]byte, runtime.Object) error {
return nil return nil
} }
type fakeConvertor struct{}
func (fakeConvertor) ConvertToVersion(in runtime.Object, _ string) (runtime.Object, error) {
return in, nil
}
var validCodec = fakeCodec{} var validCodec = fakeCodec{}
var validAccessor = resourceAccessor{} var validAccessor = resourceAccessor{}
var validConvertor = fakeConvertor{}
func fakeInterfaces(version string) (*VersionInterfaces, bool) { func fakeInterfaces(version string) (*VersionInterfaces, bool) {
return &VersionInterfaces{Codec: validCodec, MetadataAccessor: validAccessor}, true return &VersionInterfaces{Codec: validCodec, ObjectConvertor: validConvertor, MetadataAccessor: validAccessor}, true
} }
func unmatchedVersionInterfaces(version string) (*VersionInterfaces, bool) { func unmatchedVersionInterfaces(version string) (*VersionInterfaces, bool) {
@ -155,7 +162,7 @@ func TestRESTMapperRESTMapping(t *testing.T) {
if mapping.APIVersion != version { if mapping.APIVersion != version {
t.Errorf("%d: unexpected version: %#v", i, mapping) t.Errorf("%d: unexpected version: %#v", i, mapping)
} }
if mapping.Codec == nil || mapping.MetadataAccessor == nil { if mapping.Codec == nil || mapping.MetadataAccessor == nil || mapping.ObjectConvertor == nil {
t.Errorf("%d: missing codec and accessor: %#v", i, mapping) t.Errorf("%d: missing codec and accessor: %#v", i, mapping)
} }
} }