// Convert_runtime_Object_To_runtime_RawExtension is conversion function that assumes that the runtime.Object you've embedded is in // the same GroupVersion that your containing type is in. This is signficantly better than simply breaking. // Given an ordered list of preferred external versions for a given encode or conversion call, the behavior of this function could be // made generic, predictable, and controllable. func convert_runtime_Object_To_runtime_RawExtension(in runtime.Object, out *runtime.RawExtension, s conversion.Scope) error { if in == nil { return nil } externalObject, err := internal.Scheme.ConvertToVersion(in, s.Meta().DestVersion) if runtime.IsNotRegisteredError(err) { switch cast := in.(type) { case *runtime.Unknown: out.Raw = cast.Raw return nil case *runtime.Unstructured: bytes, err := runtime.Encode(runtime.UnstructuredJSONScheme, externalObject) if err != nil { return err } out.Raw = bytes return nil } } if err != nil { return err } bytes, err := runtime.Encode(codec, externalObject) if err != nil { return err } out.Raw = bytes out.Object = externalObject return nil }
// Convert_runtime_Object_To_runtime_RawExtension attempts to convert runtime.Objects to the appropriate target, returning an error // if there is insufficient information on the conversion scope to determine the target version. func Convert_runtime_Object_To_runtime_RawExtension(c runtime.ObjectConvertor, in *runtime.Object, out *runtime.RawExtension, s conversion.Scope) error { if *in == nil { return nil } obj := *in switch obj.(type) { case *runtime.Unknown, *runtime.Unstructured: out.Raw = nil out.Object = obj return nil } switch t := s.Meta().Context.(type) { case runtime.GroupVersioner: converted, err := c.ConvertToVersion(obj, t) if err != nil { return err } out.Raw = nil out.Object = converted default: return fmt.Errorf("unrecognized conversion context for versioning: %#v", t) } return nil }
// Visit implements Visitor over a stream. StreamVisitor is able to distinct multiple resources in one stream. func (v *StreamVisitor) Visit(fn VisitorFunc) error { d := yaml.NewYAMLOrJSONDecoder(v.Reader, 4096) for { ext := runtime.RawExtension{} if err := d.Decode(&ext); err != nil { if err == io.EOF { return nil } return err } // TODO: This needs to be able to handle object in other encodings and schemas. ext.Raw = bytes.TrimSpace(ext.Raw) if len(ext.Raw) == 0 || bytes.Equal(ext.Raw, []byte("null")) { continue } if err := ValidateSchema(ext.Raw, v.Schema); err != nil { return fmt.Errorf("error validating %q: %v", v.Source, err) } info, err := v.InfoForData(ext.Raw, v.Source) if err != nil { if fnErr := fn(info, err); fnErr != nil { return fnErr } continue } if err := fn(info, nil); err != nil { return err } } }
// 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 }
// Convert_runtime_Object_To_runtime_RawExtension is conversion function that assumes that the runtime.Object you've embedded is in // the same GroupVersion that your containing type is in. This is signficantly better than simply breaking. // Given an ordered list of preferred external versions for a given encode or conversion call, the behavior of this function could be // made generic, predictable, and controllable. func Convert_runtime_Object_To_runtime_RawExtension(in runtime.Object, out *runtime.RawExtension, s conversion.Scope) error { if in == nil { return nil } externalObject, err := kapi.Scheme.ConvertToVersion(in, s.Meta().DestVersion) if err != nil { return err } targetVersion, err := unversioned.ParseGroupVersion(s.Meta().DestVersion) if err != nil { return err } bytes, err := runtime.Encode(kapi.Codecs.LegacyCodec(targetVersion), externalObject) if err != nil { return err } out.Raw = bytes out.Object = externalObject return nil }