Fix convertion generator for manually written ones

This commit is contained in:
Wojciech Tyczynski
2015-05-14 12:57:02 +02:00
parent 5010b2dde0
commit b52a4e60fc
3 changed files with 84 additions and 3 deletions

View File

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