mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-11 13:02:14 +00:00
allow conversions.Scheme to expose intermidiate versioned api object
This commit is contained in:
parent
5bd928fed0
commit
2906f85227
@ -22,31 +22,38 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (s *Scheme) DecodeToVersionedObject(data []byte) (obj interface{}, version, kind string, err error) {
|
||||||
|
version, kind, err = s.DataVersionAndKind(data)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if version == "" && s.InternalVersion != "" {
|
||||||
|
return nil, "", "", fmt.Errorf("version not set in '%s'", string(data))
|
||||||
|
}
|
||||||
|
if kind == "" {
|
||||||
|
return nil, "", "", fmt.Errorf("kind not set in '%s'", string(data))
|
||||||
|
}
|
||||||
|
obj, err = s.NewObject(version, kind)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(data, obj); err != nil {
|
||||||
|
return nil, "", "", err
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Decode converts a JSON string back into a pointer to an api object.
|
// Decode converts a JSON string back into a pointer to an api object.
|
||||||
// Deduces the type based upon the fields added by the MetaInsertionFactory
|
// Deduces the type based upon the fields added by the MetaInsertionFactory
|
||||||
// technique. The object will be converted, if necessary, into the
|
// technique. The object will be converted, if necessary, into the
|
||||||
// s.InternalVersion type before being returned. Decode will not decode
|
// s.InternalVersion type before being returned. Decode will not decode
|
||||||
// objects without version set unless InternalVersion is also "".
|
// objects without version set unless InternalVersion is also "".
|
||||||
func (s *Scheme) Decode(data []byte) (interface{}, error) {
|
func (s *Scheme) Decode(data []byte) (interface{}, error) {
|
||||||
version, kind, err := s.DataVersionAndKind(data)
|
obj, version, kind, err := s.DecodeToVersionedObject(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if version == "" && s.InternalVersion != "" {
|
|
||||||
return nil, fmt.Errorf("version not set in '%s'", string(data))
|
|
||||||
}
|
|
||||||
if kind == "" {
|
|
||||||
return nil, fmt.Errorf("kind not set in '%s'", string(data))
|
|
||||||
}
|
|
||||||
obj, err := s.NewObject(version, kind)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := json.Unmarshal(data, obj); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Version and Kind should be blank in memory.
|
// Version and Kind should be blank in memory.
|
||||||
if err := s.SetVersionAndKind("", "", obj); err != nil {
|
if err := s.SetVersionAndKind("", "", obj); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user