mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Use one copy of EnforcePtr
This commit is contained in:
parent
d488e238dd
commit
13992837ea
@ -51,7 +51,7 @@ import (
|
|||||||
//
|
//
|
||||||
func (s *Scheme) EncodeToVersion(obj interface{}, destVersion string) (data []byte, err error) {
|
func (s *Scheme) EncodeToVersion(obj interface{}, destVersion string) (data []byte, err error) {
|
||||||
obj = maybeCopy(obj)
|
obj = maybeCopy(obj)
|
||||||
v, _ := enforcePtr(obj) // maybeCopy guarantees a pointer
|
v, _ := EnforcePtr(obj) // maybeCopy guarantees a pointer
|
||||||
if _, registered := s.typeToVersion[v.Type()]; !registered {
|
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())
|
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())
|
||||||
}
|
}
|
||||||
|
@ -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,
|
// ObjectVersionAndKind returns the API version and kind of the go object,
|
||||||
// or an error if it's not a pointer or is unregistered.
|
// or an error if it's not a pointer or is unregistered.
|
||||||
func (s *Scheme) ObjectVersionAndKind(obj interface{}) (apiVersion, kind string, err error) {
|
func (s *Scheme) ObjectVersionAndKind(obj interface{}) (apiVersion, kind string, err error) {
|
||||||
v, err := enforcePtr(obj)
|
v, err := EnforcePtr(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
@ -261,14 +261,3 @@ func maybeCopy(obj interface{}) interface{} {
|
|||||||
v2.Elem().Set(v)
|
v2.Elem().Set(v)
|
||||||
return v2.Interface()
|
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
|
|
||||||
}
|
|
||||||
|
@ -222,7 +222,7 @@ func (s *Scheme) Convert(in, out interface{}) error {
|
|||||||
// FindTypeMeta takes an arbitary api type, returns pointer to its TypeMeta field.
|
// FindTypeMeta takes an arbitary api type, returns pointer to its TypeMeta field.
|
||||||
// obj must be a pointer to an api type.
|
// obj must be a pointer to an api type.
|
||||||
func FindTypeMeta(obj Object) (TypeMetaInterface, error) {
|
func FindTypeMeta(obj Object) (TypeMetaInterface, error) {
|
||||||
v, err := enforcePtr(obj)
|
v, err := conversion.EnforcePtr(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -231,11 +231,11 @@ func FindTypeMeta(obj Object) (TypeMetaInterface, error) {
|
|||||||
if v.Kind() != reflect.Struct {
|
if v.Kind() != reflect.Struct {
|
||||||
return nil, fmt.Errorf("expected struct, but got %v: %v (%#v)", v.Kind(), name, v.Interface())
|
return nil, fmt.Errorf("expected struct, but got %v: %v (%#v)", v.Kind(), name, v.Interface())
|
||||||
}
|
}
|
||||||
jsonBase := v.FieldByName("TypeMeta")
|
typeMeta := v.FieldByName("TypeMeta")
|
||||||
if !jsonBase.IsValid() {
|
if !typeMeta.IsValid() {
|
||||||
return nil, fmt.Errorf("struct %v lacks embedded JSON type", name)
|
return nil, fmt.Errorf("struct %v lacks embedded JSON type", name)
|
||||||
}
|
}
|
||||||
g, err := newGenericTypeMeta(jsonBase)
|
g, err := newGenericTypeMeta(typeMeta)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user