in codegen/type_converter.go [1125:1196]
func (c *TypeConverter) genConverterForPrimitive(
toField *compile.FieldSpec,
toIdentifier string,
fromField *compile.FieldSpec,
fromIdentifier string,
overriddenField *compile.FieldSpec,
overriddenIdentifier string,
indent string,
prevKeyPrefixes []string,
) error {
var (
typeName string
toTypeCast string
overrideTypeCast string
defaultAssignment *FieldAssignment
overrideAssignment *FieldAssignment
err error
)
// resolve type
if _, ok := toField.Type.(*compile.TypedefSpec); ok {
typeName, err = c.getIdentifierName(toField.Type)
} else {
typeName, err = c.getGoTypeName(toField.Type)
}
if err != nil {
return err
}
// set assignment
if toField.Required {
toTypeCast = typeName
overrideTypeCast = typeName
if !fromField.Required {
toTypeCast = "*"
}
if overriddenField != nil {
if !overriddenField.Required {
overrideTypeCast = "*"
} else {
overriddenField.Required = true
}
}
} else {
toTypeCast = fmt.Sprintf("(*%s)", typeName)
overrideTypeCast = fmt.Sprintf("(*%s)", typeName)
if fromField.Required {
toTypeCast = fmt.Sprintf("(*%s)&", typeName)
}
if overriddenField != nil && overriddenField.Required {
overrideTypeCast = fmt.Sprintf("(*%s)&", typeName)
overriddenField.Required = true
}
}
defaultAssignment = &FieldAssignment{
From: fromField,
FromIdentifier: fromIdentifier,
To: toField,
ToIdentifier: toIdentifier,
TypeCast: toTypeCast,
}
if overriddenField != nil {
overrideAssignment = &FieldAssignment{
From: overriddenField,
FromIdentifier: overriddenIdentifier,
To: toField,
ToIdentifier: toIdentifier,
TypeCast: overrideTypeCast,
}
}
// generate assignment
c.assignWithOverride(indent, defaultAssignment, overrideAssignment, prevKeyPrefixes)
return nil
}