| 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 |
| } |