...
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 package vanity
30
31 import descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
32
33 func ForEachFile(files []*descriptor.FileDescriptorProto, f func(file *descriptor.FileDescriptorProto)) {
34 for _, file := range files {
35 f(file)
36 }
37 }
38
39 func OnlyProto2(files []*descriptor.FileDescriptorProto) []*descriptor.FileDescriptorProto {
40 outs := make([]*descriptor.FileDescriptorProto, 0, len(files))
41 for i, file := range files {
42 if file.GetSyntax() == "proto3" {
43 continue
44 }
45 outs = append(outs, files[i])
46 }
47 return outs
48 }
49
50 func OnlyProto3(files []*descriptor.FileDescriptorProto) []*descriptor.FileDescriptorProto {
51 outs := make([]*descriptor.FileDescriptorProto, 0, len(files))
52 for i, file := range files {
53 if file.GetSyntax() != "proto3" {
54 continue
55 }
56 outs = append(outs, files[i])
57 }
58 return outs
59 }
60
61 func ForEachMessageInFiles(files []*descriptor.FileDescriptorProto, f func(msg *descriptor.DescriptorProto)) {
62 for _, file := range files {
63 ForEachMessage(file.MessageType, f)
64 }
65 }
66
67 func ForEachMessage(msgs []*descriptor.DescriptorProto, f func(msg *descriptor.DescriptorProto)) {
68 for _, msg := range msgs {
69 f(msg)
70 ForEachMessage(msg.NestedType, f)
71 }
72 }
73
74 func ForEachFieldInFilesExcludingExtensions(files []*descriptor.FileDescriptorProto, f func(field *descriptor.FieldDescriptorProto)) {
75 for _, file := range files {
76 ForEachFieldExcludingExtensions(file.MessageType, f)
77 }
78 }
79
80 func ForEachFieldInFiles(files []*descriptor.FileDescriptorProto, f func(field *descriptor.FieldDescriptorProto)) {
81 for _, file := range files {
82 for _, ext := range file.Extension {
83 f(ext)
84 }
85 ForEachField(file.MessageType, f)
86 }
87 }
88
89 func ForEachFieldExcludingExtensions(msgs []*descriptor.DescriptorProto, f func(field *descriptor.FieldDescriptorProto)) {
90 for _, msg := range msgs {
91 for _, field := range msg.Field {
92 f(field)
93 }
94 ForEachField(msg.NestedType, f)
95 }
96 }
97
98 func ForEachField(msgs []*descriptor.DescriptorProto, f func(field *descriptor.FieldDescriptorProto)) {
99 for _, msg := range msgs {
100 for _, field := range msg.Field {
101 f(field)
102 }
103 for _, ext := range msg.Extension {
104 f(ext)
105 }
106 ForEachField(msg.NestedType, f)
107 }
108 }
109
110 func ForEachEnumInFiles(files []*descriptor.FileDescriptorProto, f func(enum *descriptor.EnumDescriptorProto)) {
111 for _, file := range files {
112 for _, enum := range file.EnumType {
113 f(enum)
114 }
115 }
116 }
117
118 func ForEachEnum(msgs []*descriptor.DescriptorProto, f func(field *descriptor.EnumDescriptorProto)) {
119 for _, msg := range msgs {
120 for _, field := range msg.EnumType {
121 f(field)
122 }
123 ForEachEnum(msg.NestedType, f)
124 }
125 }
126
View as plain text