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 gogoproto
30
31 import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
32 import proto "github.com/gogo/protobuf/proto"
33
34 func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool {
35 return proto.GetBoolExtension(field.Options, E_Embed, false)
36 }
37
38 func IsNullable(field *google_protobuf.FieldDescriptorProto) bool {
39 return proto.GetBoolExtension(field.Options, E_Nullable, true)
40 }
41
42 func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool {
43 return proto.GetBoolExtension(field.Options, E_Stdtime, false)
44 }
45
46 func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool {
47 return proto.GetBoolExtension(field.Options, E_Stdduration, false)
48 }
49
50 func IsStdDouble(field *google_protobuf.FieldDescriptorProto) bool {
51 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.DoubleValue"
52 }
53
54 func IsStdFloat(field *google_protobuf.FieldDescriptorProto) bool {
55 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.FloatValue"
56 }
57
58 func IsStdInt64(field *google_protobuf.FieldDescriptorProto) bool {
59 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int64Value"
60 }
61
62 func IsStdUInt64(field *google_protobuf.FieldDescriptorProto) bool {
63 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt64Value"
64 }
65
66 func IsStdInt32(field *google_protobuf.FieldDescriptorProto) bool {
67 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int32Value"
68 }
69
70 func IsStdUInt32(field *google_protobuf.FieldDescriptorProto) bool {
71 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt32Value"
72 }
73
74 func IsStdBool(field *google_protobuf.FieldDescriptorProto) bool {
75 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BoolValue"
76 }
77
78 func IsStdString(field *google_protobuf.FieldDescriptorProto) bool {
79 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.StringValue"
80 }
81
82 func IsStdBytes(field *google_protobuf.FieldDescriptorProto) bool {
83 return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BytesValue"
84 }
85
86 func IsStdType(field *google_protobuf.FieldDescriptorProto) bool {
87 return (IsStdTime(field) || IsStdDuration(field) ||
88 IsStdDouble(field) || IsStdFloat(field) ||
89 IsStdInt64(field) || IsStdUInt64(field) ||
90 IsStdInt32(field) || IsStdUInt32(field) ||
91 IsStdBool(field) ||
92 IsStdString(field) || IsStdBytes(field))
93 }
94
95 func IsWktPtr(field *google_protobuf.FieldDescriptorProto) bool {
96 return proto.GetBoolExtension(field.Options, E_Wktpointer, false)
97 }
98
99 func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool {
100 nullable := IsNullable(field)
101 if field.IsMessage() || IsCustomType(field) {
102 return nullable
103 }
104 if proto3 {
105 return false
106 }
107 return nullable || *field.Type == google_protobuf.FieldDescriptorProto_TYPE_BYTES
108 }
109
110 func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool {
111 typ := GetCustomType(field)
112 if len(typ) > 0 {
113 return true
114 }
115 return false
116 }
117
118 func IsCastType(field *google_protobuf.FieldDescriptorProto) bool {
119 typ := GetCastType(field)
120 if len(typ) > 0 {
121 return true
122 }
123 return false
124 }
125
126 func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool {
127 typ := GetCastKey(field)
128 if len(typ) > 0 {
129 return true
130 }
131 return false
132 }
133
134 func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool {
135 typ := GetCastValue(field)
136 if len(typ) > 0 {
137 return true
138 }
139 return false
140 }
141
142 func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
143 return proto.GetBoolExtension(enum.Options, E_Enumdecl, proto.GetBoolExtension(file.Options, E_EnumdeclAll, true))
144 }
145
146 func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
147 return proto.GetBoolExtension(message.Options, E_Typedecl, proto.GetBoolExtension(file.Options, E_TypedeclAll, true))
148 }
149
150 func GetCustomType(field *google_protobuf.FieldDescriptorProto) string {
151 if field == nil {
152 return ""
153 }
154 if field.Options != nil {
155 v, err := proto.GetExtension(field.Options, E_Customtype)
156 if err == nil && v.(*string) != nil {
157 return *(v.(*string))
158 }
159 }
160 return ""
161 }
162
163 func GetCastType(field *google_protobuf.FieldDescriptorProto) string {
164 if field == nil {
165 return ""
166 }
167 if field.Options != nil {
168 v, err := proto.GetExtension(field.Options, E_Casttype)
169 if err == nil && v.(*string) != nil {
170 return *(v.(*string))
171 }
172 }
173 return ""
174 }
175
176 func GetCastKey(field *google_protobuf.FieldDescriptorProto) string {
177 if field == nil {
178 return ""
179 }
180 if field.Options != nil {
181 v, err := proto.GetExtension(field.Options, E_Castkey)
182 if err == nil && v.(*string) != nil {
183 return *(v.(*string))
184 }
185 }
186 return ""
187 }
188
189 func GetCastValue(field *google_protobuf.FieldDescriptorProto) string {
190 if field == nil {
191 return ""
192 }
193 if field.Options != nil {
194 v, err := proto.GetExtension(field.Options, E_Castvalue)
195 if err == nil && v.(*string) != nil {
196 return *(v.(*string))
197 }
198 }
199 return ""
200 }
201
202 func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool {
203 name := GetCustomName(field)
204 if len(name) > 0 {
205 return true
206 }
207 return false
208 }
209
210 func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool {
211 name := GetEnumCustomName(field)
212 if len(name) > 0 {
213 return true
214 }
215 return false
216 }
217
218 func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool {
219 name := GetEnumValueCustomName(field)
220 if len(name) > 0 {
221 return true
222 }
223 return false
224 }
225
226 func GetCustomName(field *google_protobuf.FieldDescriptorProto) string {
227 if field == nil {
228 return ""
229 }
230 if field.Options != nil {
231 v, err := proto.GetExtension(field.Options, E_Customname)
232 if err == nil && v.(*string) != nil {
233 return *(v.(*string))
234 }
235 }
236 return ""
237 }
238
239 func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string {
240 if field == nil {
241 return ""
242 }
243 if field.Options != nil {
244 v, err := proto.GetExtension(field.Options, E_EnumCustomname)
245 if err == nil && v.(*string) != nil {
246 return *(v.(*string))
247 }
248 }
249 return ""
250 }
251
252 func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string {
253 if field == nil {
254 return ""
255 }
256 if field.Options != nil {
257 v, err := proto.GetExtension(field.Options, E_EnumvalueCustomname)
258 if err == nil && v.(*string) != nil {
259 return *(v.(*string))
260 }
261 }
262 return ""
263 }
264
265 func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string {
266 if field == nil {
267 return nil
268 }
269 if field.Options != nil {
270 v, err := proto.GetExtension(field.Options, E_Jsontag)
271 if err == nil && v.(*string) != nil {
272 return (v.(*string))
273 }
274 }
275 return nil
276 }
277
278 func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string {
279 if field == nil {
280 return nil
281 }
282 if field.Options != nil {
283 v, err := proto.GetExtension(field.Options, E_Moretags)
284 if err == nil && v.(*string) != nil {
285 return (v.(*string))
286 }
287 }
288 return nil
289 }
290
291 type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
292
293 func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
294 return proto.GetBoolExtension(enum.Options, E_GoprotoEnumPrefix, proto.GetBoolExtension(file.Options, E_GoprotoEnumPrefixAll, true))
295 }
296
297 func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
298 return proto.GetBoolExtension(message.Options, E_GoprotoStringer, proto.GetBoolExtension(file.Options, E_GoprotoStringerAll, true))
299 }
300
301 func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
302 return proto.GetBoolExtension(message.Options, E_GoprotoGetters, proto.GetBoolExtension(file.Options, E_GoprotoGettersAll, true))
303 }
304
305 func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
306 return proto.GetBoolExtension(message.Options, E_Onlyone, proto.GetBoolExtension(file.Options, E_OnlyoneAll, false))
307 }
308
309 func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
310 return proto.GetBoolExtension(message.Options, E_Gostring, proto.GetBoolExtension(file.Options, E_GostringAll, false))
311 }
312
313 func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
314 return proto.GetBoolExtension(message.Options, E_Equal, proto.GetBoolExtension(file.Options, E_EqualAll, false))
315 }
316
317 func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
318 return proto.GetBoolExtension(message.Options, E_VerboseEqual, proto.GetBoolExtension(file.Options, E_VerboseEqualAll, false))
319 }
320
321 func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
322 return proto.GetBoolExtension(message.Options, E_Stringer, proto.GetBoolExtension(file.Options, E_StringerAll, false))
323 }
324
325 func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
326 return proto.GetBoolExtension(message.Options, E_Face, proto.GetBoolExtension(file.Options, E_FaceAll, false))
327 }
328
329 func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
330 return proto.GetBoolExtension(message.Options, E_Description, proto.GetBoolExtension(file.Options, E_DescriptionAll, false))
331 }
332
333 func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
334 return proto.GetBoolExtension(message.Options, E_Populate, proto.GetBoolExtension(file.Options, E_PopulateAll, false))
335 }
336
337 func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
338 return proto.GetBoolExtension(message.Options, E_Testgen, proto.GetBoolExtension(file.Options, E_TestgenAll, false))
339 }
340
341 func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
342 return proto.GetBoolExtension(message.Options, E_Benchgen, proto.GetBoolExtension(file.Options, E_BenchgenAll, false))
343 }
344
345 func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
346 return proto.GetBoolExtension(message.Options, E_Marshaler, proto.GetBoolExtension(file.Options, E_MarshalerAll, false))
347 }
348
349 func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
350 return proto.GetBoolExtension(message.Options, E_Unmarshaler, proto.GetBoolExtension(file.Options, E_UnmarshalerAll, false))
351 }
352
353 func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
354 return proto.GetBoolExtension(message.Options, E_StableMarshaler, proto.GetBoolExtension(file.Options, E_StableMarshalerAll, false))
355 }
356
357 func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
358 return proto.GetBoolExtension(message.Options, E_Sizer, proto.GetBoolExtension(file.Options, E_SizerAll, false))
359 }
360
361 func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
362 return proto.GetBoolExtension(message.Options, E_Protosizer, proto.GetBoolExtension(file.Options, E_ProtosizerAll, false))
363 }
364
365 func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
366 return proto.GetBoolExtension(enum.Options, E_GoprotoEnumStringer, proto.GetBoolExtension(file.Options, E_GoprotoEnumStringerAll, true))
367 }
368
369 func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
370 return proto.GetBoolExtension(enum.Options, E_EnumStringer, proto.GetBoolExtension(file.Options, E_EnumStringerAll, false))
371 }
372
373 func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
374 return proto.GetBoolExtension(message.Options, E_UnsafeMarshaler, proto.GetBoolExtension(file.Options, E_UnsafeMarshalerAll, false))
375 }
376
377 func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
378 return proto.GetBoolExtension(message.Options, E_UnsafeUnmarshaler, proto.GetBoolExtension(file.Options, E_UnsafeUnmarshalerAll, false))
379 }
380
381 func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
382 return proto.GetBoolExtension(message.Options, E_GoprotoExtensionsMap, proto.GetBoolExtension(file.Options, E_GoprotoExtensionsMapAll, true))
383 }
384
385 func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
386 return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true))
387 }
388
389 func IsProto3(file *google_protobuf.FileDescriptorProto) bool {
390 return file.GetSyntax() == "proto3"
391 }
392
393 func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool {
394 return proto.GetBoolExtension(file.Options, E_GogoprotoImport, true)
395 }
396
397 func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
398 return proto.GetBoolExtension(message.Options, E_Compare, proto.GetBoolExtension(file.Options, E_CompareAll, false))
399 }
400
401 func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool {
402 return proto.GetBoolExtension(file.Options, E_GoprotoRegistration, false)
403 }
404
405 func HasMessageName(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
406 return proto.GetBoolExtension(message.Options, E_Messagename, proto.GetBoolExtension(file.Options, E_MessagenameAll, false))
407 }
408
409 func HasSizecache(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
410 return proto.GetBoolExtension(message.Options, E_GoprotoSizecache, proto.GetBoolExtension(file.Options, E_GoprotoSizecacheAll, true))
411 }
412
413 func HasUnkeyed(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
414 return proto.GetBoolExtension(message.Options, E_GoprotoUnkeyed, proto.GetBoolExtension(file.Options, E_GoprotoUnkeyedAll, true))
415 }
416
View as plain text