diff options
| author | Jeff Carr <[email protected]> | 2025-09-15 03:51:54 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-15 03:51:54 -0500 |
| commit | b53d68d6b80081c4459e9d4a44d4059153e211dc (patch) | |
| tree | 011a28feeb1f91f94286fd4313d4abad6f737ba6 /tablePB.go | |
| parent | bd897e4edb60fbaf282ca0d71b99b89d30b6d3dc (diff) | |
continue work on testing using 'any' in GUI PB
Diffstat (limited to 'tablePB.go')
| -rw-r--r-- | tablePB.go | 71 |
1 files changed, 71 insertions, 0 deletions
@@ -11,6 +11,7 @@ import ( "go.wit.com/lib/protobuf/guipb" "go.wit.com/log" "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -34,6 +35,9 @@ func PrintTable(pb *guipb.Table) { var sizes []int for _, name := range pb.Order { arg, attr, tmp := getColAttr(pb, name) + if attr == nil { + continue + } HEIGHT = tmp args = append(args, arg) if attr.Width == 0 { @@ -49,6 +53,11 @@ func PrintTable(pb *guipb.Table) { for i := range HEIGHT { var cells []string for _, name := range pb.Order { + if val, ok := getAnyCell(pb, name, int(i)); ok { + h += 1 + cells = append(cells, val) + continue + } if val, ok := getTableCell(pb, name, int(i)); ok { // log.Info("tree: CELL GOOD", pb.Title, name, w, h, val) h += 1 @@ -112,6 +121,61 @@ func getTableCell(t *guipb.Table, name string, row int) (string, bool) { s := shell.FormatDuration(time.Since(cellTime.AsTime())) return s, true } + for _, r := range t.AnyCols { + if name != r.Header.Name { + // log.Info("skip sint row:", r.Header.Name, "!=", name) + continue + } + // cellTime := r.Vals[row] + // s := shell.FormatDuration(time.Since(cellTime.AsTime())) + return "fixme", true + } + return "", false +} + +func getAnyCell(t *guipb.Table, name string, row int) (string, bool) { + for _, col := range t.AnyCols { + if name != col.Header.Name { + // log.Info("skip sint row:", r.Header.Name, "!=", name) + continue + } + anyVal := col.Vals[row] + + switch col.Attr.Type { + case guipb.ColAttr_STRING: + // return col.Vals[row] true + case guipb.ColAttr_INT: + var finalInt int32 + // 1. Check if the Any contains an Int32Value + if anyVal.MessageIs(&wrapperspb.Int32Value{}) { + var intValue wrapperspb.Int32Value + // 2. Unmarshal into the wrapper + if err := anyVal.UnmarshalTo(&intValue); err == nil { + // 3. Get the native Go int32 from the wrapper + finalInt = intValue.GetValue() + } + } + + return fmt.Sprintf("%d", finalInt), true + case guipb.ColAttr_DURATION: + case guipb.ColAttr_TIME: + var sout string + var tsProto timestamppb.Timestamp + if err := anyVal.UnmarshalTo(&tsProto); err == nil { + // It's a timestamp, now convert it back to a Go time.Time + goTime := tsProto.AsTime() + // fmt.Printf("Successfully unpacked timestamp: %v\n", goTime) + sout = shell.FormatDuration(time.Since(goTime)) + return sout, true + } + return "", false + default: + log.Info("cell unhandled type", col.Attr.Type) + } + // cellTime := r.Vals[row] + // s := shell.FormatDuration(time.Since(cellTime.AsTime())) + return "fixme", true + } return "", false } @@ -144,5 +208,12 @@ func getColAttr(t *guipb.Table, name string) (string, *guipb.ColAttr, int) { } return r.Header.Name, r.Attr, len(r.Vals) } + for _, r := range t.AnyCols { + if name != r.Header.Name { + // log.Info("skip sint row:", r.Header.Name, "!=", name) + continue + } + return r.Header.Name, r.Attr, len(r.Vals) + } return "", nil, 0 } |
