-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathgen_types.go
101 lines (94 loc) · 1.95 KB
/
gen_types.go
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
package bebop
func (f File) customRecordTypes() map[string]struct{} {
out := make(map[string]struct{})
for _, st := range f.Structs {
out[st.Name] = struct{}{}
}
for _, msg := range f.Messages {
out[msg.Name] = struct{}{}
}
for _, union := range f.Unions {
out[union.Name] = struct{}{}
for _, ufd := range union.Fields {
if ufd.Struct != nil {
out[ufd.Struct.Name] = struct{}{}
}
if ufd.Message != nil {
out[ufd.Message.Name] = struct{}{}
}
}
}
return out
}
func (f File) usedTypes() map[string]bool {
out := make(map[string]bool)
for _, st := range f.Structs {
stOut := st.usedTypes()
for k, v := range stOut {
out[k] = v
}
}
for _, msg := range f.Messages {
msgOut := msg.usedTypes()
for k, v := range msgOut {
out[k] = v
}
}
for _, union := range f.Unions {
unionOut := union.usedTypes()
for k, v := range unionOut {
out[k] = v
}
}
return out
}
func (st Struct) usedTypes() map[string]bool {
out := make(map[string]bool)
for _, fd := range st.Fields {
fdTypes := fd.usedTypes()
for k, v := range fdTypes {
out[k] = v
}
}
return out
}
func (msg Message) usedTypes() map[string]bool {
out := make(map[string]bool)
for _, fd := range msg.Fields {
fdTypes := fd.usedTypes()
for k, v := range fdTypes {
out[k] = v
}
}
return out
}
func (u Union) usedTypes() map[string]bool {
out := make(map[string]bool)
for _, ufd := range u.Fields {
fdTypes := ufd.usedTypes()
for k, v := range fdTypes {
out[k] = v
}
}
return out
}
func (ft FieldType) usedTypes() map[string]bool {
if ft.Array != nil {
return ft.Array.usedTypes()
}
if ft.Map != nil {
valTypes := ft.Map.Value.usedTypes()
valTypes[ft.Map.Key] = true
return valTypes
}
return map[string]bool{ft.Simple: true}
}
func (ufd UnionField) usedTypes() map[string]bool {
if ufd.Struct != nil {
return ufd.Struct.usedTypes()
}
if ufd.Message != nil {
return ufd.Message.usedTypes()
}
return map[string]bool{}
}