diff --git a/generate.go b/generate.go index e1ef396..8c53297 100644 --- a/generate.go +++ b/generate.go @@ -240,7 +240,7 @@ func (pb *Files) makeNewSortfile(pf *File) error { // find() for _, v := range msg.Vars { - if v.VarType != "string" { + if !(v.VarType == "string" || (v.VarType == "int64")) { continue } if v.IsRepeated { @@ -254,13 +254,15 @@ func (pb *Files) makeNewSortfile(pf *File) error { // special case because of the enforced .proto format FUNCNAME = "FindBy" + v.VarName funcdef := pmsg.generateFindBy(wSort, FUNCNAME, PARENT, s, v) - // func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT, VARNAME, VARTYPE, COLOR string) string { log.Printf("Adding %s\n", funcdef) - } else { - // deprecate these - FUNCNAME = "Find" + VARNAME + "By" + v.VarName - } + FRUITS := PARENT + FRUIT := s.VarType + APPLE := v.VarName + COLOR := v.VarType + funcdef = pmsg.insertBy(wSort, FRUITS, FRUIT, APPLE, COLOR) + log.Printf("Adding %s\n", funcdef) + } } else { if v.VarType == "string" { // probably dumb. move to a database if you need this diff --git a/generateFind.go b/generateFind.go index 121ed06..6f799e5 100644 --- a/generateFind.go +++ b/generateFind.go @@ -12,31 +12,55 @@ import ( func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT string, sortvals *Sort, childVar *MsgVar) string { LOCK := msg.getLockname("x") - if childVar.VarType != "string" { - return "" - } VARNAME := sortvals.VarName VARTYPE := sortvals.VarType COLOR := childVar.VarName - funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(s string) *" + VARTYPE - fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR) - fmt.Fprintln(w, funcdef, "{") - fmt.Fprintln(w, " if x == nil {") - fmt.Fprintln(w, " return nil") - fmt.Fprintln(w, " }") - fmt.Fprintln(w, "") - fmt.Fprintln(w, " "+LOCK+".RLock()") - fmt.Fprintln(w, " defer "+LOCK+".RUnlock()") - fmt.Fprintln(w, "") - fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {") - fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == s {") - fmt.Fprintln(w, " return x."+VARNAME+"[i]") - fmt.Fprintln(w, " }") - fmt.Fprintln(w, " }") - fmt.Fprintln(w, " return nil") - fmt.Fprintln(w, "}") - fmt.Fprintln(w, "") + if childVar.VarType == "string" { + funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(s string) *" + VARTYPE - return funcdef + fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR) + fmt.Fprintln(w, funcdef, "{") + fmt.Fprintln(w, " if x == nil {") + fmt.Fprintln(w, " return nil") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, "") + fmt.Fprintln(w, " "+LOCK+".RLock()") + fmt.Fprintln(w, " defer "+LOCK+".RUnlock()") + fmt.Fprintln(w, "") + fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {") + fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == s {") + fmt.Fprintln(w, " return x."+VARNAME+"[i]") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " return nil") + fmt.Fprintln(w, "}") + fmt.Fprintln(w, "") + return funcdef + } + + if childVar.VarType == "int64" { + funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(y int64) *" + VARTYPE + + fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR) + fmt.Fprintln(w, funcdef, "{") + fmt.Fprintln(w, " if x == nil {") + fmt.Fprintln(w, " return nil") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, "") + fmt.Fprintln(w, " "+LOCK+".RLock()") + fmt.Fprintln(w, " defer "+LOCK+".RUnlock()") + fmt.Fprintln(w, "") + fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {") + fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == y {") + fmt.Fprintln(w, " return x."+VARNAME+"[i]") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " return nil") + fmt.Fprintln(w, "}") + fmt.Fprintln(w, "") + return funcdef + } + + return "" } diff --git a/generateInsert.go b/generateInsert.go index 79eb6ad..eb1fc95 100644 --- a/generateInsert.go +++ b/generateInsert.go @@ -9,24 +9,29 @@ import ( ) // new idea. useful? TODO: look at this again in 1y -func (msg *MsgName) insertBy(w io.Writer, FRUIT, APPLES, APPLE string, COLOR string) { +// Mar 2025. yes. this is useful +func (msg *MsgName) insertBy(w io.Writer, FRUITS, FRUIT, APPLE string, COLOR string) string { LOCK := msg.getLockname("x") - fmt.Fprintln(w, "// returns an "+APPLE+" if "+COLOR+" matches, otherwise create") - fmt.Fprintln(w, "func (x *"+FRUIT+") InsertBy"+COLOR+" (y string) *"+APPLE+" {") + funcdef := "func (x *" + FRUITS + ") InsertBy" + APPLE + " (y " + COLOR + ") *" + FRUIT + " {" + + fmt.Fprintln(w, "// returns a "+FRUIT+" if "+APPLE+" matches, otherwise create") + fmt.Fprintln(w, funcdef) fmt.Fprintln(w, " "+LOCK+".Lock()") fmt.Fprintln(w, " defer "+LOCK+".Unlock()") fmt.Fprintln(w, "") - fmt.Fprintln(w, " for _, p := range x."+APPLES+" {") - fmt.Fprintln(w, " if p."+COLOR+" == y {") - fmt.Fprintln(w, " return p") + fmt.Fprintln(w, " for _, z := range x."+FRUITS+" {") + fmt.Fprintln(w, " if z."+APPLE+" == y {") + fmt.Fprintln(w, " return z") fmt.Fprintln(w, " }") fmt.Fprintln(w, " }") fmt.Fprintln(w, "") - fmt.Fprintln(w, " z := new("+APPLE+")") - fmt.Fprintln(w, " z."+COLOR+" = y") - fmt.Fprintln(w, " x."+APPLES+" = append(x."+APPLES+", z)") + fmt.Fprintln(w, " z := new("+FRUIT+")") + fmt.Fprintln(w, " z."+APPLE+" = y") + fmt.Fprintln(w, " x."+FRUITS+" = append(x."+FRUITS+", z)") fmt.Fprintln(w, " return z") fmt.Fprintln(w, "}") fmt.Fprintln(w, "") + + return funcdef }