diff options
| author | Jeff Carr <[email protected]> | 2025-01-10 22:27:38 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-01-10 22:27:38 -0600 |
| commit | f3297022a8ed73db93842311d4b1429e8f69e8c7 (patch) | |
| tree | 947b1c90cf528c0e3de4e749d100dbdd86d0241a | |
| parent | 6ce9c29135cd181755e0e76a5ddba98e37ae49d8 (diff) | |
close to being able to remove the old functions
| -rw-r--r-- | main.go | 4 | ||||
| -rw-r--r-- | sort.go | 98 | ||||
| -rw-r--r-- | sortNew.go | 41 |
3 files changed, 94 insertions, 49 deletions
@@ -151,7 +151,9 @@ func main() { pb.marshal(pf) // make the sort.pb.go file - pb.makeNewSortfile(pf) + if err := pb.makeNewSortfile(pf); err != nil { + badExit(err) + } } func okExit(s string) { @@ -48,25 +48,39 @@ func (pb *Files) makeNewSortfile(pf *File) error { */ // attempt to add sort functions for pf.Base - pf.processMessage(pf.Bases, wSort, wFind) - pf.processMessage(pf.Base, wSort, wFind) + if err := pf.processMessage(pf.Bases, wSort, wFind); err != nil { + return err + } + if err := pf.processMessage(pf.Base, wSort, wFind); err != nil { + return err + } return nil } +// to simplify being able to read the code, FRUIT, APPLES and APPLE are used +// FRUIT == the string name of the message in the protobuf file +// APPLE == the type of the repeated variable +// APPLES == the variable name of the repeated struct func (pf *File) processMessage(msg *MsgName, wSort, wFind io.Writer) error { var FRUIT string = cases.Title(language.English, cases.NoLower).String(msg.Name) + log.Printf("Generating functions for %s\n", FRUIT) + for _, v := range msg.Vars { if !v.IsRepeated { log.Printf("\tSKIP %s %s\n", v.VarName, v.VarType) continue } + log.Printf("\tFOUND REPEATED %s %s\n", v.VarName, v.VarType) // use easier to read variable names APPLE and APPLES in the code var APPLE string = v.VarType var APPLES string = cases.Title(language.English, cases.NoLower).String(v.VarName) // try and find the message struct for APPLE var found *MsgName + if pf.Base.Name == APPLE { + found = pf.Base + } for _, m := range pf.MsgNames { if m.Name == APPLE { found = m @@ -77,44 +91,74 @@ func (pf *File) processMessage(msg *MsgName, wSort, wFind io.Writer) error { return fmt.Errorf("failed to find struct %s", APPLE) } - found.addSortByMsg(FRUIT, APPLES, APPLE, wSort, wFind) + log.Printf("FOUND: %s %s for %s\n", APPLES, APPLE, FRUIT) + + found.simpleAppend(wFind, FRUIT, APPLES, APPLE) + found.addAppendByMsg(wFind, FRUIT, APPLES, APPLE) + found.addDeleteByMsg(wFind, FRUIT, APPLES, APPLE) + found.addInsertByMsg(wFind, FRUIT, APPLES, APPLE) // new idea + + found.addSortByMsg(wSort, FRUIT, APPLES, APPLE) } return nil } -func (parent *MsgName) addSortByMsg(FRUIT, APPLES, APPLE string, wSort, wFind io.Writer) error { - log.Printf("\tFOUND!: %s %s for %s\n", APPLES, APPLE, FRUIT) +func (parent *MsgName) addDeleteByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tDELETE: %s %s for %s\n", APPLES, APPLE, FRUIT) var COLORS []string + for _, v := range parent.Vars { + if !v.HasUnique { + continue + } + var COLOR string = cases.Title(language.English, cases.NoLower).String(v.VarName) + COLORS = append(COLORS, COLOR) + log.Printf("\t\t(x %s) DeleteBy%s(string) *%s\n", FRUIT, COLOR, APPLE) + if argv.Delete { + parent.deleteByWithCopy(w, FRUIT, APPLES, APPLE, COLOR) + } else { + parent.deleteBy(w, FRUIT, APPLES, APPLE, COLOR) + } + } +} + +func (parent *MsgName) addInsertByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tINSERT: %s %s for %s\n", APPLES, APPLE, FRUIT) for _, v := range parent.Vars { - if v.HasSort { - // log.Printf("\tSort!: %s %s for %s\n", APPLES, APPLE, v.VarName) - newS := cases.Title(language.English, cases.NoLower).String(v.VarName) - log.Printf("\t(x %s) SortdBy%s() *%sIter\n", parent.Name, newS, APPLE) + if v.HasUnique { + var COLOR string = cases.Title(language.English, cases.NoLower).String(v.VarName) + log.Printf("\t\t(x %s) InsertBy%s(string) *%s\n", FRUIT, COLOR, APPLE) + parent.insertByColor(w, FRUIT, APPLES, APPLE, COLOR) } + } +} + +func (parent *MsgName) addAppendByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tAPPEND!: %s %s for %s\n", APPLES, APPLE, FRUIT) + var COLORS []string + + for _, v := range parent.Vars { if v.HasUnique { - newS := cases.Title(language.English, cases.NoLower).String(v.VarName) - var COLOR string = newS + var COLOR string = cases.Title(language.English, cases.NoLower).String(v.VarName) COLORS = append(COLORS, COLOR) - log.Printf("\t(x %s) AppendUniqueBy%s(%s)\n", parent.Name, newS, APPLE) - parent.appendUniqueBy(wFind, FRUIT, APPLES, APPLE, COLOR) - - if v.VarType == "string" { - log.Printf("\t(x %s) FindBy%s(string) *%s\n", FRUIT, COLOR, APPLE) - parent.findBy(wFind, FRUIT, APPLES, APPLE, COLOR) - log.Printf("\t(x %s) DeleteBy%s(string) *%s\n", parent.Name, newS, APPLE) - if argv.Delete { - parent.deleteByWithCopy(wFind, FRUIT, APPLES, APPLE, COLOR) - } else { - parent.deleteBy(wFind, FRUIT, APPLES, APPLE, COLOR) - } - } + log.Printf("\t\t(x %s) AppendUniqueBy%s(%s)\n", FRUIT, COLOR, APPLE) + parent.appendUniqueBy(w, FRUIT, APPLES, APPLE, COLOR) } } - parent.insertByColors(wFind, FRUIT, APPLES, APPLE, COLORS) if len(COLORS) > 0 { - parent.appendUnique(wFind, FRUIT, APPLES, APPLE, COLORS) + parent.appendUnique(w, FRUIT, APPLES, APPLE, COLORS) + } +} + +func (parent *MsgName) addSortByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tSORT!: %s %s for %s\n", APPLES, APPLE, FRUIT) + + for _, v := range parent.Vars { + if v.HasSort { + // log.Printf("\tSort!: %s %s for %s\n", APPLES, APPLE, v.VarName) + newS := cases.Title(language.English, cases.NoLower).String(v.VarName) + log.Printf("\t\t(x %s) SortdBy%s() *%sIter\n", FRUIT, newS, APPLE) + } } - return nil } @@ -30,28 +30,27 @@ func (msg *MsgName) simpleAppend(w io.Writer, FRUIT, APPLES, APPLE string) { fmt.Fprintln(w, "") } -func (msg *MsgName) insertByColors(w io.Writer, FRUIT, APPLES, APPLE string, COLORS []string) { +func (msg *MsgName) insertByColor(w io.Writer, FRUIT, APPLES, APPLE string, COLOR string) { LOCK := msg.getLockname("x") - for _, COLOR := range COLORS { - fmt.Fprintln(w, "// TESTING") - fmt.Fprintln(w, "// returns an "+APPLE+" if "+COLOR+" matches, otherwise create") - fmt.Fprintln(w, "func (x *"+FRUIT+") InsertBy"+COLOR+" (y string) "+APPLE+" {") - 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+" == "+COLOR+" {") - fmt.Fprintln(w, " return p") - 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, " return true") - fmt.Fprintln(w, "}") - fmt.Fprintln(w, "") - } + + fmt.Fprintln(w, "// TESTING") + fmt.Fprintln(w, "// returns an "+APPLE+" if "+COLOR+" matches, otherwise create") + fmt.Fprintln(w, "func (x *"+FRUIT+") InsertBy"+COLOR+" (y string) *"+APPLE+" {") + 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, " }") + 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, " return z") + fmt.Fprintln(w, "}") + fmt.Fprintln(w, "") } func (msg *MsgName) appendUnique(w io.Writer, FRUIT, APPLES, APPLE string, COLORS []string) { |
