mirror of
https://github.com/open-cluster-management-io/ocm.git
synced 2026-05-06 17:27:08 +00:00
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package serialization
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
)
|
|
|
|
// DecodeNestedRawExtensionOrUnknown
|
|
func DecodeNestedRawExtensionOrUnknown(d runtime.Decoder, ext *runtime.RawExtension) {
|
|
if ext.Raw == nil || ext.Object != nil {
|
|
return
|
|
}
|
|
obj, gvk, err := d.Decode(ext.Raw, nil, nil)
|
|
if err != nil {
|
|
unk := &runtime.Unknown{Raw: ext.Raw}
|
|
if runtime.IsNotRegisteredError(err) {
|
|
if _, gvk, err := d.Decode(ext.Raw, nil, unk); err == nil {
|
|
unk.APIVersion = gvk.GroupVersion().String()
|
|
unk.Kind = gvk.Kind
|
|
ext.Object = unk
|
|
return
|
|
}
|
|
}
|
|
// TODO: record mime-type with the object
|
|
if gvk != nil {
|
|
unk.APIVersion = gvk.GroupVersion().String()
|
|
unk.Kind = gvk.Kind
|
|
}
|
|
obj = unk
|
|
}
|
|
ext.Object = obj
|
|
}
|
|
|
|
// EncodeNestedRawExtension will encode the object in the RawExtension (if not nil) or
|
|
// return an error.
|
|
func EncodeNestedRawExtension(e runtime.Encoder, ext *runtime.RawExtension) error {
|
|
if ext.Raw != nil || ext.Object == nil {
|
|
return nil
|
|
}
|
|
data, err := runtime.Encode(e, ext.Object)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
ext.Raw = data
|
|
return nil
|
|
}
|