From f74f3641879416068de07c4c10051b5e987a1e8d Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 13 Jan 2025 03:36:55 -0600 Subject: [PATCH] bad message handling logic. working the issue --- generate.go | 20 +++++++++++++++++++- generateFind.go | 8 +++++++- generateMutex.go | 31 +++++++++++++++++++------------ 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/generate.go b/generate.go index fbb1943..4632997 100644 --- a/generate.go +++ b/generate.go @@ -39,6 +39,9 @@ func (pb *Files) makeNewSortfile(pf *File) error { // can't work against slices continue } + if v.VarType != "string" { + continue + } VARNAME := v.VarName funcdef := newSortType(wSort, PARENT, VARNAME) log.Printf("Adding %s\n", funcdef) @@ -186,6 +189,12 @@ func (pb *Files) makeNewSortfile(pf *File) error { PARENT := s.MsgName VARNAME := s.VarName + if PARENT != VARNAME { + // this does not conform to the autogenpb standard format + continue + } + // special case because of the enforced .proto format // ONLY SUPPORT THIS + msg := pf.findMsg(s.VarType) if msg == nil { return fmt.Errorf("failed to find struct %s", s.VarType) @@ -193,6 +202,9 @@ func (pb *Files) makeNewSortfile(pf *File) error { // find() for _, v := range msg.Vars { + if v.VarType != "string" { + continue + } if v.IsRepeated { continue } @@ -203,7 +215,7 @@ func (pb *Files) makeNewSortfile(pf *File) error { if PARENT == VARNAME { // special case because of the enforced .proto format FUNCNAME = "FindBy" + v.VarName - funcdef := msg.generateFindBy(wSort, FUNCNAME, PARENT, VARNAME, s.VarType, v.VarName) + funcdef := msg.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 { @@ -222,6 +234,9 @@ func (pb *Files) makeNewSortfile(pf *File) error { // delete() functions for _, v := range msg.Vars { + if v.VarType != "string" { + continue + } if v.IsRepeated { continue } @@ -254,6 +269,9 @@ func (pb *Files) makeNewSortfile(pf *File) error { // AppendBy() functions. todo: fix these so Append() is for simple things and Insert() is for unique keys var ucount int for _, v := range msg.Vars { + if v.VarType != "string" { + continue + } if v.IsRepeated { continue } diff --git a/generateFind.go b/generateFind.go index a0fd743..c3720af 100644 --- a/generateFind.go +++ b/generateFind.go @@ -7,8 +7,14 @@ import ( // generates Find() and some other stuff -func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT, VARNAME, VARTYPE, COLOR string) string { +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) diff --git a/generateMutex.go b/generateMutex.go index 0361895..9695cb1 100644 --- a/generateMutex.go +++ b/generateMutex.go @@ -14,6 +14,10 @@ import ( ) func (msg *MsgName) getLockname(s string) string { + if msg.NoMutex { + return "bad" + // return msg.Lockname + } // leave this function stubbed in for development of autogenpb // if argv.Mutex { // // use the mutex lock from the modified protoc.pb.go file @@ -120,8 +124,7 @@ func (pf *File) structMatch(line string) bool { msg = pf.Bases start = "type " + msg.Name + " struct {" if strings.HasPrefix(line, start) { - msg.MutexFound = true - return true + return msg.setupMutex(pf.Filebase + "Mu") } // ONLY PASS THIS IF YOU DO NOT WANT TO USE MARSHAL() @@ -129,22 +132,26 @@ func (pf *File) structMatch(line string) bool { msg = pf.Base start = "type " + msg.Name + " struct {" if strings.HasPrefix(line, start) { - msg.MutexFound = true - msg.Lockname = "x.Lock" - return true + return msg.setupMutex(pf.Filebase + "Mu") } for _, msg = range pf.MsgNames { start = "type " + msg.Name + " struct {" if strings.HasPrefix(line, start) { - msg.MutexFound = true - if msg.NoMutex { - msg.Lockname = pf.Filebase + "Mu" // this should be lowercase. do not export the Mutex - } else { - msg.Lockname = "x.Lock" - } - return true + return msg.setupMutex(pf.Filebase + "Mu") } } return false } + +// nameMu should probably be lowercase. +// notsure if it ever makes sense to export a mutex or even if you can +func (msg *MsgName) setupMutex(nameMu string) bool { + msg.MutexFound = true + if msg.NoMutex { + msg.Lockname = nameMu + return false + } + msg.Lockname = "x.Lock" + return true +}