forked from ysugimoto/grpc-graphql-gateway
/
dependencies.go
79 lines (71 loc) · 1.47 KB
/
dependencies.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
package spec
type DependType int
const (
DependTypeMessage DependType = iota
DependTypeInput
DependTypeEnum
DependTypeInterface
)
// shorthand alias
type ms map[string]struct{}
type Dependencies struct {
message ms
enum ms
input ms
interfaces ms
}
func NewDependencies() *Dependencies {
return &Dependencies{
message: ms{},
enum: ms{},
input: ms{},
interfaces: ms{},
}
}
func (d *Dependencies) Depend(t DependType, pkg string) {
switch t {
case DependTypeMessage:
d.message[pkg] = struct{}{}
case DependTypeEnum:
d.enum[pkg] = struct{}{}
case DependTypeInput:
d.input[pkg] = struct{}{}
case DependTypeInterface:
d.interfaces[pkg] = struct{}{}
}
}
func (d *Dependencies) IsDepended(t DependType, pkg string) bool {
var ok bool
switch t {
case DependTypeMessage:
_, ok = d.message[pkg]
case DependTypeEnum:
_, ok = d.enum[pkg]
case DependTypeInput:
_, ok = d.input[pkg]
case DependTypeInterface:
_, ok = d.interfaces[pkg]
}
return ok
}
func (d *Dependencies) GetDependendencies() map[string][]string {
ret := map[string][]string{
"message": {},
"enum": {},
"input": {},
"interface": {},
}
for p := range d.message {
ret["message"] = append(ret["message"], p)
}
for p := range d.enum {
ret["enum"] = append(ret["enum"], p)
}
for p := range d.input {
ret["input"] = append(ret["input"], p)
}
for p := range d.interfaces {
ret["interface"] = append(ret["interface"], p)
}
return ret
}