From b52a4e60fc4b4b01d2eb66c630975fb311536bc3 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Thu, 14 May 2015 12:57:02 +0200 Subject: [PATCH] Fix convertion generator for manually written ones --- pkg/api/v1/conversion_generated.go | 38 +++++++++++++++++++++++++ pkg/api/v1beta3/conversion_generated.go | 38 +++++++++++++++++++++++++ pkg/runtime/conversion_generator.go | 11 +++++-- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/pkg/api/v1/conversion_generated.go b/pkg/api/v1/conversion_generated.go index e1f871b710f..c3a6612739e 100644 --- a/pkg/api/v1/conversion_generated.go +++ b/pkg/api/v1/conversion_generated.go @@ -1377,6 +1377,42 @@ func convert_api_ListMeta_To_v1_ListMeta(in *newer.ListMeta, out *ListMeta, s co return nil } +func convert_v1_ListOptions_To_api_ListOptions(in *ListOptions, out *newer.ListOptions, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ListOptions))(in) + } + if err := convert_v1_TypeMeta_To_api_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := s.Convert(&in.LabelSelector, &out.LabelSelector, 0); err != nil { + return err + } + if err := s.Convert(&in.FieldSelector, &out.FieldSelector, 0); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + return nil +} + +func convert_api_ListOptions_To_v1_ListOptions(in *newer.ListOptions, out *ListOptions, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*newer.ListOptions))(in) + } + if err := convert_api_TypeMeta_To_v1_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := s.Convert(&in.LabelSelector, &out.LabelSelector, 0); err != nil { + return err + } + if err := s.Convert(&in.FieldSelector, &out.FieldSelector, 0); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + return nil +} + func convert_v1_NFSVolumeSource_To_api_NFSVolumeSource(in *NFSVolumeSource, out *newer.NFSVolumeSource, s conversion.Scope) error { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*NFSVolumeSource))(in) @@ -4269,6 +4305,7 @@ func init() { convert_api_LimitRangeSpec_To_v1_LimitRangeSpec, convert_api_LimitRange_To_v1_LimitRange, convert_api_ListMeta_To_v1_ListMeta, + convert_api_ListOptions_To_v1_ListOptions, convert_api_List_To_v1_List, convert_api_NFSVolumeSource_To_v1_NFSVolumeSource, convert_api_NamespaceList_To_v1_NamespaceList, @@ -4377,6 +4414,7 @@ func init() { convert_v1_LimitRangeSpec_To_api_LimitRangeSpec, convert_v1_LimitRange_To_api_LimitRange, convert_v1_ListMeta_To_api_ListMeta, + convert_v1_ListOptions_To_api_ListOptions, convert_v1_List_To_api_List, convert_v1_NFSVolumeSource_To_api_NFSVolumeSource, convert_v1_NamespaceList_To_api_NamespaceList, diff --git a/pkg/api/v1beta3/conversion_generated.go b/pkg/api/v1beta3/conversion_generated.go index 83cb55384c1..37ab2ff0acc 100644 --- a/pkg/api/v1beta3/conversion_generated.go +++ b/pkg/api/v1beta3/conversion_generated.go @@ -1377,6 +1377,42 @@ func convert_api_ListMeta_To_v1beta3_ListMeta(in *newer.ListMeta, out *ListMeta, return nil } +func convert_v1beta3_ListOptions_To_api_ListOptions(in *ListOptions, out *newer.ListOptions, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ListOptions))(in) + } + if err := convert_v1beta3_TypeMeta_To_api_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := s.Convert(&in.LabelSelector, &out.LabelSelector, 0); err != nil { + return err + } + if err := s.Convert(&in.FieldSelector, &out.FieldSelector, 0); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + return nil +} + +func convert_api_ListOptions_To_v1beta3_ListOptions(in *newer.ListOptions, out *ListOptions, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*newer.ListOptions))(in) + } + if err := convert_api_TypeMeta_To_v1beta3_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := s.Convert(&in.LabelSelector, &out.LabelSelector, 0); err != nil { + return err + } + if err := s.Convert(&in.FieldSelector, &out.FieldSelector, 0); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + return nil +} + func convert_v1beta3_NFSVolumeSource_To_api_NFSVolumeSource(in *NFSVolumeSource, out *newer.NFSVolumeSource, s conversion.Scope) error { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*NFSVolumeSource))(in) @@ -4269,6 +4305,7 @@ func init() { convert_api_LimitRangeSpec_To_v1beta3_LimitRangeSpec, convert_api_LimitRange_To_v1beta3_LimitRange, convert_api_ListMeta_To_v1beta3_ListMeta, + convert_api_ListOptions_To_v1beta3_ListOptions, convert_api_List_To_v1beta3_List, convert_api_NFSVolumeSource_To_v1beta3_NFSVolumeSource, convert_api_NamespaceList_To_v1beta3_NamespaceList, @@ -4377,6 +4414,7 @@ func init() { convert_v1beta3_LimitRangeSpec_To_api_LimitRangeSpec, convert_v1beta3_LimitRange_To_api_LimitRange, convert_v1beta3_ListMeta_To_api_ListMeta, + convert_v1beta3_ListOptions_To_api_ListOptions, convert_v1beta3_List_To_api_List, convert_v1beta3_NFSVolumeSource_To_api_NFSVolumeSource, convert_v1beta3_NamespaceList_To_api_NamespaceList, diff --git a/pkg/runtime/conversion_generator.go b/pkg/runtime/conversion_generator.go index 722f33b257d..80de6c9cb5a 100644 --- a/pkg/runtime/conversion_generator.go +++ b/pkg/runtime/conversion_generator.go @@ -81,6 +81,9 @@ func (g *generator) generateConversionsBetween(inType, outType reflect.Type) err } if inType.Kind() != outType.Kind() { + if existingConversion { + return nil + } return fmt.Errorf("cannot convert types of different kinds: %v %v", inType, outType) } // We should be able to generate conversions both sides. @@ -173,9 +176,6 @@ func (g *generator) generateConversionsForStruct(inType, outType reflect.Type) e if !found { return fmt.Errorf("couldn't find a corresponding field %v in %v", inField.Name, outType) } - if inField.Type.Kind() != outField.Type.Kind() { - return fmt.Errorf("cannot convert types of different kinds: %v %v", inField, outField) - } if isComplexType(inField.Type) { if err := g.generateConversionsBetween(inField.Type, outField.Type); err != nil { return err @@ -733,6 +733,11 @@ func (g *generator) existsDedicatedConversionFunction(inType, outType reflect.Ty return false } } + if inType.Kind() != outType.Kind() { + // TODO(wojtek-t): Currently all conversions between types of different kinds are + // unnamed. Thus we return false here. + return false + } return g.scheme.Converter().HasConversionFunc(inType, outType) }