func snake(s string, private bool, acronyms map[string]string) string { var parts []string parts1 := strings.Split(s, "_") for _, p1 := range parts1 { parts2 := strings.Split(p1, "/") for _, p2 := range parts2 { parts3 := strings.Split(p2, "-") parts = append(parts, parts3...) } } for i, part := range parts { if !private || i > 0 { if formatted, ok := acronyms[part]; ok { parts[i] = formatted continue } } parts[i] = xstrings.FirstRuneToUpper(part) } if private { parts[0] = xstrings.FirstRuneToLower(parts[0]) } return strings.Join(parts, "") }
func processField(f *Field) { f.Name = alpha(exportName(preslash(f.Name))) //trim the field name by the hittype name (prevents ga.Event.EventAction) for _, h := range f.HitTypes { f.Name = goName(exportName(h), f.Name) } f.PrivateName = xstrings.FirstRuneToLower(f.Name) //these are manually defaulted if f.Name == "ProtocolVersion" || f.Name == "ClientID" { f.Required = false } //special case: DOCS ARE WRONG //these are not optional if strings.Contains(f.Docs, "Must not be empty.") { f.Docs = strings.Replace(f.Docs, "Must not be empty.", "", 1) f.Required = true } //special case: //unexport the hit type field if f.Name == "HitType" { f.Name = xstrings.FirstRuneToLower(f.Name) } f.Docs = comment(trim(f.Docs)) f.Type = goType(f.Type) f.ParamStr = `"` + f.Param + `"` //check param for <extraVars> for _, i := range indexMatcher.FindAllString(f.Param, -1) { //extract each var newi := indexVar(i) f.Indices = append(f.Indices, newi) //convert param var into a string concat f.ParamStr = strings.Replace(f.ParamStr, i, `" + h.`+newi+` + "`, 1) } }