func walkFieldGroupsInternal()

in codegen/thrift.go [189:242]


func walkFieldGroupsInternal(
	goPrefix string,
	thriftPrefix string,
	fields compile.FieldGroup,
	visitField walkFieldVisitor,
	seen map[*compile.FieldSpec]bool,
) bool {
	for i := 0; i < len(fields); i++ {
		field := fields[i]

		if seen[field] {
			// Skip this field if we have already considered it
			continue
		}
		seen[field] = true

		bail := visitField(goPrefix, thriftPrefix, field)
		if bail {
			return true
		}

		realType := compile.RootTypeSpec(field.Type)
		switch t := realType.(type) {
		case *compile.BinarySpec:
		case *compile.StringSpec:
		case *compile.BoolSpec:
		case *compile.DoubleSpec:
		case *compile.I8Spec:
		case *compile.I16Spec:
		case *compile.I32Spec:
		case *compile.I64Spec:
		case *compile.EnumSpec:
		case *compile.ListSpec:
		case *compile.SetSpec:
		case *compile.StructSpec:
			bail := walkFieldGroupsInternal(
				goPrefix+"."+PascalCase(field.Name),
				thriftPrefix+"."+field.Name,
				t.Fields,
				visitField,
				seen,
			)
			if bail {
				return true
			}
		case *compile.MapSpec:
			// TODO: implement
		default:
			panic("unknown Spec")
		}
	}

	return false
}