summaryrefslogtreecommitdiff
path: root/human.go
blob: 3bfb994f46dd8a5b0a2e25003cceb15684e1112f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0

package main

import (
	"fmt"

	"go.wit.com/log"
)

// This was just going to be a function to print the results to stdout

// print the protobuf in human form
func (pf *File) printMsgTable() error {
	pf.Bases.printMsg()
	pf.Base.printMsg()

	// everything else
	for _, msg := range pf.MsgNames {
		msg.printMsg()
	}

	log.Printf("\n")
	log.Printf("      %-2s %20s %20s %20s %20s\n", "", "PARENT STRUCT", "VAR STRUCT TYPE", "VAR NAME", "LOCK")
	// for i, s := range slices.Backward(pf.ToSort) {
	for i, s := range pf.ToSort {
		var funcname string
		STRUCT := s.MsgName
		CHILD := s.VarType
		VARNAME := s.VarName
		LOCK := s.Lockname

		log.Printf("SORT: %-2d %20s %20s %20s %20s %s\n", i, STRUCT, CHILD, VARNAME, LOCK, "")

		var FUNCTYPE string
		if STRUCT == VARNAME {
			FUNCTYPE = STRUCT
		} else {
			FUNCTYPE = VARNAME
		}

		if s.VarType+"s" == s.VarName {
			funcname = "func (x *" + FUNCTYPE + ") All() *[]iter" + s.VarType
		} else {
			funcname = "func (x *" + FUNCTYPE + ") all" + s.VarName + "() *[]iter" + s.VarType
		}
		log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
		msg := pf.findMsg(s.VarType)
		if msg == nil {
			return fmt.Errorf("failed to find struct %s", s.VarType)
		}
		for _, v := range msg.Vars {
			if v.HasSort {
				funcname := "func (x *" + FUNCTYPE + ") SortBy" + v.VarName + "(" + v.VarType + ") *[]iter" + s.VarType
				log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
			}
		}

		var ucount int
		for _, v := range msg.Vars {
			if v.HasUnique {
				ucount += 1
				funcname := "func (x *" + FUNCTYPE + ") AppendUnique" + v.VarName + "(" + v.VarType + ")"
				log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
			}
		}
		for _, v := range msg.Vars {
			if v.HasUnique {
				funcname := "func (x *" + FUNCTYPE + ") DeleteBy" + v.VarName + "(" + v.VarType + ") bool"
				log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
			}
		}

		for _, v := range msg.Vars {
			if v.HasUnique {
				funcname = "func (x *" + FUNCTYPE + ") FindBy" + v.VarName + "(a " + v.VarType + ") *" + s.VarType + "(using" + v.VarName + ")"
				log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
			} else {
				if v.VarType == "string" {
					funcname = "func (x *" + FUNCTYPE + ") FindBy" + v.VarName + "(a string) []*" + s.VarType + "  ???"
					log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
				}
			}
		}
		if ucount == 1 {
			for _, v := range msg.Vars {
				if !v.HasUnique {
					continue
				}
				funcname = "func (x *" + FUNCTYPE + ") Insert(a *" + v.VarType + ") (*" + CHILD + ", isNew bool)"
				log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
			}
		}
		if ucount > 1 {
			funcname = "func (x *" + FUNCTYPE + ") Insert(a *" + CHILD + ") (*" + CHILD + ", isNew bool)"
			log.Printf("      %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
		}

	}
	return nil
}

func (msg *MsgName) printMsg() {
	var s string
	if msg.DoMutex {
		s += "(mutex) "
	}
	if msg.DoMarshal {
		s += "(marshal) "
	}
	log.Printf("%s %s\n", msg.Name, s)

	for _, v := range msg.Vars {
		var end string
		if v.IsRepeated {
			end += "(repeated) "
		}
		if v.HasSort {
			end += "(sort) "
		}
		if v.HasUnique {
			end += "(unique) "
		}
		log.Printf("\t%s %s %s\n", v.VarName, v.VarType, end)
	}
}