func()

in codegen/type_converter.go [1073:1108]


func (f *FieldAssignment) Generate(indent string, uninitialized map[string]*fieldStruct, prevKeyPrefixes []string, useRecurGen bool) string {
	var lines = make([]string, 0)
	if !f.IsTransform() {
		//  do an extra nil check for Overrides
		if (!f.From.Required && f.To.Required) || f.ExtraNilCheck {
			// need to nil check otherwise we could be cast or deref nil
			lines = append(lines, indent+"if "+f.FromIdentifier+" != nil {")
			lines = append(lines, checkOptionalNil(indent+"\t", uninitialized, f.ToIdentifier, prevKeyPrefixes, useRecurGen)...)
			lines = append(lines, formatAssign(indent+"\t", f.ToIdentifier, f.TypeCast, f.FromIdentifier))
			lines = append(lines, indent+"}")
		} else {
			lines = append(lines, checkOptionalNil(indent, uninitialized, f.ToIdentifier, prevKeyPrefixes, useRecurGen)...)
			lines = append(lines, formatAssign(indent, f.ToIdentifier, f.TypeCast, f.FromIdentifier))
		}
		return strings.Join(lines, "\n")
	}
	//  generates nil checks for intermediate objects on the f.FromIdentifier path
	checks := convertIdentifiersToNilChecks(getMiddleIdentifiers(f.FromIdentifier))
	if !f.ExtraNilCheck {
		// if from is required or from/to are both optional   then we don't need the final outer check
		if f.From.Required || !f.From.Required && !f.To.Required {
			checks = checks[:len(checks)-1]
		}
		if len(checks) == 0 {
			lines = append(lines, checkOptionalNil(indent, uninitialized, f.ToIdentifier, prevKeyPrefixes, useRecurGen)...)
			lines = append(lines, formatAssign(indent, f.ToIdentifier, f.TypeCast, f.FromIdentifier))
			return strings.Join(lines, "\n")
		}
	}
	lines = append(lines, indent+"if "+strings.Join(checks, " && ")+" {")
	lines = append(lines, checkOptionalNil(indent+"\t", uninitialized, f.ToIdentifier, prevKeyPrefixes, useRecurGen)...)
	lines = append(lines, formatAssign(indent+"\t", f.ToIdentifier, f.TypeCast, f.FromIdentifier))
	lines = append(lines, indent+"}")
	// TODO else?  log? should this silently eat intermediate nils as none-assignment,  should set nil?
	return strings.Join(lines, "\n")
}