...

Source file src/github.com/gogo/protobuf/gogoproto/helper.go

Documentation: github.com/gogo/protobuf/gogoproto

     1  // Protocol Buffers for Go with Gadgets
     2  //
     3  // Copyright (c) 2013, The GoGo Authors. All rights reserved.
     4  // http://github.com/gogo/protobuf
     5  //
     6  // Redistribution and use in source and binary forms, with or without
     7  // modification, are permitted provided that the following conditions are
     8  // met:
     9  //
    10  //     * Redistributions of source code must retain the above copyright
    11  // notice, this list of conditions and the following disclaimer.
    12  //     * Redistributions in binary form must reproduce the above
    13  // copyright notice, this list of conditions and the following disclaimer
    14  // in the documentation and/or other materials provided with the
    15  // distribution.
    16  //
    17  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    18  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    19  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    20  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    21  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    22  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    23  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    24  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    25  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    26  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    27  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    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