diff --git a/pkg/conversion/encode.go b/pkg/conversion/encode.go index 0f17f6057ab..8b29c1841d7 100644 --- a/pkg/conversion/encode.go +++ b/pkg/conversion/encode.go @@ -51,7 +51,7 @@ import ( // func (s *Scheme) EncodeToVersion(obj interface{}, destVersion string) (data []byte, err error) { obj = maybeCopy(obj) - v, _ := enforcePtr(obj) // maybeCopy guarantees a pointer + v, _ := EnforcePtr(obj) // maybeCopy guarantees a pointer if _, registered := s.typeToVersion[v.Type()]; !registered { return nil, fmt.Errorf("type %v is not registered and it will be impossible to Decode it, therefore Encode will refuse to encode it.", v.Type()) } diff --git a/pkg/conversion/scheme.go b/pkg/conversion/scheme.go index 605bb8e7f35..cad4c4ff2db 100644 --- a/pkg/conversion/scheme.go +++ b/pkg/conversion/scheme.go @@ -228,7 +228,7 @@ func (s *Scheme) DataVersionAndKind(data []byte) (version, kind string, err erro // ObjectVersionAndKind returns the API version and kind of the go object, // or an error if it's not a pointer or is unregistered. func (s *Scheme) ObjectVersionAndKind(obj interface{}) (apiVersion, kind string, err error) { - v, err := enforcePtr(obj) + v, err := EnforcePtr(obj) if err != nil { return "", "", err } @@ -261,14 +261,3 @@ func maybeCopy(obj interface{}) interface{} { v2.Elem().Set(v) return v2.Interface() } - -// enforcePtr ensures that obj is a pointer of some sort. Returns a reflect.Value -// of the dereferenced pointer, ensuring that it is settable/addressable. -// Returns an error if this is not possible. -func enforcePtr(obj interface{}) (reflect.Value, error) { - v := reflect.ValueOf(obj) - if v.Kind() != reflect.Ptr { - return reflect.Value{}, fmt.Errorf("expected pointer, but got %v", v.Type().Name()) - } - return v.Elem(), nil -} diff --git a/pkg/runtime/scheme.go b/pkg/runtime/scheme.go index 29d83c1f880..3e02e17d017 100644 --- a/pkg/runtime/scheme.go +++ b/pkg/runtime/scheme.go @@ -222,7 +222,7 @@ func (s *Scheme) Convert(in, out interface{}) error { // FindTypeMeta takes an arbitary api type, returns pointer to its TypeMeta field. // obj must be a pointer to an api type. func FindTypeMeta(obj Object) (TypeMetaInterface, error) { - v, err := enforcePtr(obj) + v, err := conversion.EnforcePtr(obj) if err != nil { return nil, err } @@ -231,11 +231,11 @@ func FindTypeMeta(obj Object) (TypeMetaInterface, error) { if v.Kind() != reflect.Struct { return nil, fmt.Errorf("expected struct, but got %v: %v (%#v)", v.Kind(), name, v.Interface()) } - jsonBase := v.FieldByName("TypeMeta") - if !jsonBase.IsValid() { + typeMeta := v.FieldByName("TypeMeta") + if !typeMeta.IsValid() { return nil, fmt.Errorf("struct %v lacks embedded JSON type", name) } - g, err := newGenericTypeMeta(jsonBase) + g, err := newGenericTypeMeta(typeMeta) if err != nil { return nil, err }