summaryrefslogtreecommitdiff
path: root/human.go
blob: c735bf4802eccd56717b82d6cd2101b2a9ddd0a6 (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
package main

import (
	"fmt"

	"go.wit.com/log"
)

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

// instead, it's the core logic of the whole app
// --dry-run on the command line will just print what would be generated

// 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)
	}
}