func()

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
}