gogoproto - ActiveState ActiveGo 1.8
...

Package gogoproto

import "github.com/gogo/protobuf/gogoproto"
Overview
Index

Overview ▾

Package gogoproto provides extensions for protocol buffers to achieve:

- fast marshalling and unmarshalling.
- peace of mind by optionally generating test and benchmark code.
- more canonical Go structures.
- less typing by optionally generating extra helper code.
- goprotobuf compatibility

More Canonical Go Structures

A lot of time working with a goprotobuf struct will lead you to a place where you create another struct that is easier to work with and then have a function to copy the values between the two structs. You might also find that basic structs that started their life as part of an API need to be sent over the wire. With gob, you could just send it. With goprotobuf, you need to make a parallel struct. Gogoprotobuf tries to fix these problems with the nullable, embed, customtype and customname field extensions.

- nullable, if false, a field is generated without a pointer (see warning below).
- embed, if true, the field is generated as an embedded field.
- customtype, It works with the Marshal and Unmarshal methods, to allow you to have your own types in your struct, but marshal to bytes. For example, custom.Uuid or custom.Fixed128
- customname (beta), Changes the generated fieldname. This is especially useful when generated methods conflict with fieldnames.
- casttype (beta), Changes the generated fieldtype.  All generated code assumes that this type is castable to the protocol buffer field type.  It does not work for structs or enums.
- castkey (beta), Changes the generated fieldtype for a map key.  All generated code assumes that this type is castable to the protocol buffer field type.  Only supported on maps.
- castvalue (beta), Changes the generated fieldtype for a map value.  All generated code assumes that this type is castable to the protocol buffer field type.  Only supported on maps.

Warning about nullable: According to the Protocol Buffer specification, you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of Protocol Buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset.

Let us look at:

github.com/gogo/protobuf/test/example/example.proto

for a quicker overview.

The following message:

  package test;

  import "github.com/gogo/protobuf/gogoproto/gogo.proto";

	message A {
		optional string Description = 1 [(gogoproto.nullable) = false];
		optional int64 Number = 2 [(gogoproto.nullable) = false];
		optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
	}

Will generate a go struct which looks a lot like this:

type A struct {
	Description string
	Number      int64
	Id          github_com_gogo_protobuf_test_custom.Uuid
}

You will see there are no pointers, since all fields are non-nullable. You will also see a custom type which marshals to a string. Be warned it is your responsibility to test your custom types thoroughly. You should think of every possible empty and nil case for your marshaling, unmarshaling and size methods.

Next we will embed the message A in message B.

message B {
	optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
	repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
}

See below that A is embedded in B.

type B struct {
	A
	G []github_com_gogo_protobuf_test_custom.Uint128
}

Also see the repeated custom type.

type Uint128 [2]uint64

Next we will create a custom name for one of our fields.

message C {
	optional int64 size = 1 [(gogoproto.customname) = "MySize"];
}

See below that the field's name is MySize and not Size.

type C struct {
	MySize		*int64
}

The is useful when having a protocol buffer message with a field name which conflicts with a generated method. As an example, having a field name size and using the sizer plugin to generate a Size method will cause a go compiler error. Using customname you can fix this error without changing the field name. This is typically useful when working with a protocol buffer that was designed before these methods and/or the go language were avialable.

Gogoprotobuf also has some more subtle changes, these could be changed back:

- the generated package name for imports do not have the extra /filename.pb,
but are actually the imports specified in the .proto file.

Gogoprotobuf also has lost some features which should be brought back with time:

- Marshalling and unmarshalling with reflect and without the unsafe package,
this requires work in pointer_reflect.go

Why does nullable break protocol buffer specifications:

The protocol buffer specification states, somewhere, that you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of protocol buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset.

Goprotobuf Compatibility:

Gogoprotobuf is compatible with Goprotobuf, because it is compatible with protocol buffers. Gogoprotobuf generates the same code as goprotobuf if no extensions are used. The enumprefix, getters and stringer extensions can be used to remove some of the unnecessary code generated by goprotobuf:

- gogoproto_import, if false, the generated code imports github.com/golang/protobuf/proto instead of github.com/gogo/protobuf/proto.
- goproto_enum_prefix, if false, generates the enum constant names without the messagetype prefix
- goproto_enum_stringer (experimental), if false, the enum is generated without the default string method, this is useful for rather using enum_stringer, or allowing you to write your own string method.
- goproto_getters, if false, the message is generated without get methods, this is useful when you would rather want to use face
- goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method.
- goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension
- goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields.
- goproto_registration (beta), if true, the generated files will register all messages and types against both gogo/protobuf and golang/protobuf. This is necessary when using third-party packages which read registrations from golang/protobuf (such as the grpc-gateway).

Less Typing and Peace of Mind is explained in their specific plugin folders godoc:

- github.com/gogo/protobuf/plugin/<extension_name>

If you do not use any of these extension the code that is generated will be the same as if goprotobuf has generated it.

The most complete way to see examples is to look at

github.com/gogo/protobuf/test/thetest.proto

Gogoprototest is a seperate project, because we want to keep gogoprotobuf independant of goprotobuf, but we still want to test it thoroughly.

Package gogoproto is a generated protocol buffer package.

It is generated from these files:

gogo.proto

It has these top-level messages:

Index ▾

Variables
func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool
func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func GetCastKey(field *google_protobuf.FieldDescriptorProto) string
func GetCastType(field *google_protobuf.FieldDescriptorProto) string
func GetCastValue(field *google_protobuf.FieldDescriptorProto) string
func GetCustomName(field *google_protobuf.FieldDescriptorProto) string
func GetCustomType(field *google_protobuf.FieldDescriptorProto) string
func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string
func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string
func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string
func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string
func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool
func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool
func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool
func IsCastType(field *google_protobuf.FieldDescriptorProto) bool
func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool
func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool
func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool
func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool
func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool
func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool
func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool
func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool
func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsNullable(field *google_protobuf.FieldDescriptorProto) bool
func IsProto3(file *google_protobuf.FileDescriptorProto) bool
func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool
func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool
func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool
func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool
type EnableFunc

Package files

doc.go gogo.pb.go helper.go

Variables

var E_Benchgen = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64016,
    Name:          "gogoproto.benchgen",
    Tag:           "varint,64016,opt,name=benchgen",
    Filename:      "gogo.proto",
}
var E_BenchgenAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63016,
    Name:          "gogoproto.benchgen_all",
    Tag:           "varint,63016,opt,name=benchgen_all,json=benchgenAll",
    Filename:      "gogo.proto",
}
var E_Castkey = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65008,
    Name:          "gogoproto.castkey",
    Tag:           "bytes,65008,opt,name=castkey",
    Filename:      "gogo.proto",
}
var E_Casttype = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65007,
    Name:          "gogoproto.casttype",
    Tag:           "bytes,65007,opt,name=casttype",
    Filename:      "gogo.proto",
}
var E_Castvalue = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65009,
    Name:          "gogoproto.castvalue",
    Tag:           "bytes,65009,opt,name=castvalue",
    Filename:      "gogo.proto",
}
var E_Compare = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64029,
    Name:          "gogoproto.compare",
    Tag:           "varint,64029,opt,name=compare",
    Filename:      "gogo.proto",
}
var E_CompareAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63029,
    Name:          "gogoproto.compare_all",
    Tag:           "varint,63029,opt,name=compare_all,json=compareAll",
    Filename:      "gogo.proto",
}
var E_Customname = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65004,
    Name:          "gogoproto.customname",
    Tag:           "bytes,65004,opt,name=customname",
    Filename:      "gogo.proto",
}
var E_Customtype = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65003,
    Name:          "gogoproto.customtype",
    Tag:           "bytes,65003,opt,name=customtype",
    Filename:      "gogo.proto",
}
var E_Description = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64014,
    Name:          "gogoproto.description",
    Tag:           "varint,64014,opt,name=description",
    Filename:      "gogo.proto",
}
var E_DescriptionAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63014,
    Name:          "gogoproto.description_all",
    Tag:           "varint,63014,opt,name=description_all,json=descriptionAll",
    Filename:      "gogo.proto",
}
var E_Embed = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         65002,
    Name:          "gogoproto.embed",
    Tag:           "varint,65002,opt,name=embed",
    Filename:      "gogo.proto",
}
var E_EnumCustomname = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.EnumOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         62023,
    Name:          "gogoproto.enum_customname",
    Tag:           "bytes,62023,opt,name=enum_customname,json=enumCustomname",
    Filename:      "gogo.proto",
}
var E_EnumStringer = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.EnumOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         62022,
    Name:          "gogoproto.enum_stringer",
    Tag:           "varint,62022,opt,name=enum_stringer,json=enumStringer",
    Filename:      "gogo.proto",
}
var E_EnumStringerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63022,
    Name:          "gogoproto.enum_stringer_all",
    Tag:           "varint,63022,opt,name=enum_stringer_all,json=enumStringerAll",
    Filename:      "gogo.proto",
}
var E_Enumdecl = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.EnumOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         62024,
    Name:          "gogoproto.enumdecl",
    Tag:           "varint,62024,opt,name=enumdecl",
    Filename:      "gogo.proto",
}
var E_EnumdeclAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63031,
    Name:          "gogoproto.enumdecl_all",
    Tag:           "varint,63031,opt,name=enumdecl_all,json=enumdeclAll",
    Filename:      "gogo.proto",
}
var E_EnumvalueCustomname = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.EnumValueOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         66001,
    Name:          "gogoproto.enumvalue_customname",
    Tag:           "bytes,66001,opt,name=enumvalue_customname,json=enumvalueCustomname",
    Filename:      "gogo.proto",
}
var E_Equal = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64013,
    Name:          "gogoproto.equal",
    Tag:           "varint,64013,opt,name=equal",
    Filename:      "gogo.proto",
}
var E_EqualAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63013,
    Name:          "gogoproto.equal_all",
    Tag:           "varint,63013,opt,name=equal_all,json=equalAll",
    Filename:      "gogo.proto",
}
var E_Face = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64005,
    Name:          "gogoproto.face",
    Tag:           "varint,64005,opt,name=face",
    Filename:      "gogo.proto",
}
var E_FaceAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63005,
    Name:          "gogoproto.face_all",
    Tag:           "varint,63005,opt,name=face_all,json=faceAll",
    Filename:      "gogo.proto",
}
var E_GogoprotoImport = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63027,
    Name:          "gogoproto.gogoproto_import",
    Tag:           "varint,63027,opt,name=gogoproto_import,json=gogoprotoImport",
    Filename:      "gogo.proto",
}
var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.EnumOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         62001,
    Name:          "gogoproto.goproto_enum_prefix",
    Tag:           "varint,62001,opt,name=goproto_enum_prefix,json=goprotoEnumPrefix",
    Filename:      "gogo.proto",
}
var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63002,
    Name:          "gogoproto.goproto_enum_prefix_all",
    Tag:           "varint,63002,opt,name=goproto_enum_prefix_all,json=goprotoEnumPrefixAll",
    Filename:      "gogo.proto",
}
var E_GoprotoEnumStringer = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.EnumOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         62021,
    Name:          "gogoproto.goproto_enum_stringer",
    Tag:           "varint,62021,opt,name=goproto_enum_stringer,json=goprotoEnumStringer",
    Filename:      "gogo.proto",
}
var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63021,
    Name:          "gogoproto.goproto_enum_stringer_all",
    Tag:           "varint,63021,opt,name=goproto_enum_stringer_all,json=goprotoEnumStringerAll",
    Filename:      "gogo.proto",
}
var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64025,
    Name:          "gogoproto.goproto_extensions_map",
    Tag:           "varint,64025,opt,name=goproto_extensions_map,json=goprotoExtensionsMap",
    Filename:      "gogo.proto",
}
var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63025,
    Name:          "gogoproto.goproto_extensions_map_all",
    Tag:           "varint,63025,opt,name=goproto_extensions_map_all,json=goprotoExtensionsMapAll",
    Filename:      "gogo.proto",
}
var E_GoprotoGetters = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64001,
    Name:          "gogoproto.goproto_getters",
    Tag:           "varint,64001,opt,name=goproto_getters,json=goprotoGetters",
    Filename:      "gogo.proto",
}
var E_GoprotoGettersAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63001,
    Name:          "gogoproto.goproto_getters_all",
    Tag:           "varint,63001,opt,name=goproto_getters_all,json=goprotoGettersAll",
    Filename:      "gogo.proto",
}
var E_GoprotoRegistration = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63032,
    Name:          "gogoproto.goproto_registration",
    Tag:           "varint,63032,opt,name=goproto_registration,json=goprotoRegistration",
    Filename:      "gogo.proto",
}
var E_GoprotoStringer = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64003,
    Name:          "gogoproto.goproto_stringer",
    Tag:           "varint,64003,opt,name=goproto_stringer,json=goprotoStringer",
    Filename:      "gogo.proto",
}
var E_GoprotoStringerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63003,
    Name:          "gogoproto.goproto_stringer_all",
    Tag:           "varint,63003,opt,name=goproto_stringer_all,json=goprotoStringerAll",
    Filename:      "gogo.proto",
}
var E_GoprotoUnrecognized = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64026,
    Name:          "gogoproto.goproto_unrecognized",
    Tag:           "varint,64026,opt,name=goproto_unrecognized,json=goprotoUnrecognized",
    Filename:      "gogo.proto",
}
var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63026,
    Name:          "gogoproto.goproto_unrecognized_all",
    Tag:           "varint,63026,opt,name=goproto_unrecognized_all,json=goprotoUnrecognizedAll",
    Filename:      "gogo.proto",
}
var E_Gostring = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64006,
    Name:          "gogoproto.gostring",
    Tag:           "varint,64006,opt,name=gostring",
    Filename:      "gogo.proto",
}
var E_GostringAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63006,
    Name:          "gogoproto.gostring_all",
    Tag:           "varint,63006,opt,name=gostring_all,json=gostringAll",
    Filename:      "gogo.proto",
}
var E_Jsontag = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65005,
    Name:          "gogoproto.jsontag",
    Tag:           "bytes,65005,opt,name=jsontag",
    Filename:      "gogo.proto",
}
var E_Marshaler = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64017,
    Name:          "gogoproto.marshaler",
    Tag:           "varint,64017,opt,name=marshaler",
    Filename:      "gogo.proto",
}
var E_MarshalerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63017,
    Name:          "gogoproto.marshaler_all",
    Tag:           "varint,63017,opt,name=marshaler_all,json=marshalerAll",
    Filename:      "gogo.proto",
}
var E_Moretags = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*string)(nil),
    Field:         65006,
    Name:          "gogoproto.moretags",
    Tag:           "bytes,65006,opt,name=moretags",
    Filename:      "gogo.proto",
}
var E_Nullable = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         65001,
    Name:          "gogoproto.nullable",
    Tag:           "varint,65001,opt,name=nullable",
    Filename:      "gogo.proto",
}
var E_Onlyone = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64009,
    Name:          "gogoproto.onlyone",
    Tag:           "varint,64009,opt,name=onlyone",
    Filename:      "gogo.proto",
}
var E_OnlyoneAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63009,
    Name:          "gogoproto.onlyone_all",
    Tag:           "varint,63009,opt,name=onlyone_all,json=onlyoneAll",
    Filename:      "gogo.proto",
}
var E_Populate = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64007,
    Name:          "gogoproto.populate",
    Tag:           "varint,64007,opt,name=populate",
    Filename:      "gogo.proto",
}
var E_PopulateAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63007,
    Name:          "gogoproto.populate_all",
    Tag:           "varint,63007,opt,name=populate_all,json=populateAll",
    Filename:      "gogo.proto",
}
var E_Protosizer = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64028,
    Name:          "gogoproto.protosizer",
    Tag:           "varint,64028,opt,name=protosizer",
    Filename:      "gogo.proto",
}
var E_ProtosizerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63028,
    Name:          "gogoproto.protosizer_all",
    Tag:           "varint,63028,opt,name=protosizer_all,json=protosizerAll",
    Filename:      "gogo.proto",
}
var E_Sizer = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64020,
    Name:          "gogoproto.sizer",
    Tag:           "varint,64020,opt,name=sizer",
    Filename:      "gogo.proto",
}
var E_SizerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63020,
    Name:          "gogoproto.sizer_all",
    Tag:           "varint,63020,opt,name=sizer_all,json=sizerAll",
    Filename:      "gogo.proto",
}
var E_StableMarshaler = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64019,
    Name:          "gogoproto.stable_marshaler",
    Tag:           "varint,64019,opt,name=stable_marshaler,json=stableMarshaler",
    Filename:      "gogo.proto",
}
var E_StableMarshalerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63019,
    Name:          "gogoproto.stable_marshaler_all",
    Tag:           "varint,63019,opt,name=stable_marshaler_all,json=stableMarshalerAll",
    Filename:      "gogo.proto",
}
var E_Stdduration = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         65011,
    Name:          "gogoproto.stdduration",
    Tag:           "varint,65011,opt,name=stdduration",
    Filename:      "gogo.proto",
}
var E_Stdtime = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FieldOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         65010,
    Name:          "gogoproto.stdtime",
    Tag:           "varint,65010,opt,name=stdtime",
    Filename:      "gogo.proto",
}
var E_Stringer = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         67008,
    Name:          "gogoproto.stringer",
    Tag:           "varint,67008,opt,name=stringer",
    Filename:      "gogo.proto",
}
var E_StringerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63008,
    Name:          "gogoproto.stringer_all",
    Tag:           "varint,63008,opt,name=stringer_all,json=stringerAll",
    Filename:      "gogo.proto",
}
var E_Testgen = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64015,
    Name:          "gogoproto.testgen",
    Tag:           "varint,64015,opt,name=testgen",
    Filename:      "gogo.proto",
}
var E_TestgenAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63015,
    Name:          "gogoproto.testgen_all",
    Tag:           "varint,63015,opt,name=testgen_all,json=testgenAll",
    Filename:      "gogo.proto",
}
var E_Typedecl = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64030,
    Name:          "gogoproto.typedecl",
    Tag:           "varint,64030,opt,name=typedecl",
    Filename:      "gogo.proto",
}
var E_TypedeclAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63030,
    Name:          "gogoproto.typedecl_all",
    Tag:           "varint,63030,opt,name=typedecl_all,json=typedeclAll",
    Filename:      "gogo.proto",
}
var E_Unmarshaler = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64018,
    Name:          "gogoproto.unmarshaler",
    Tag:           "varint,64018,opt,name=unmarshaler",
    Filename:      "gogo.proto",
}
var E_UnmarshalerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63018,
    Name:          "gogoproto.unmarshaler_all",
    Tag:           "varint,63018,opt,name=unmarshaler_all,json=unmarshalerAll",
    Filename:      "gogo.proto",
}
var E_UnsafeMarshaler = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64023,
    Name:          "gogoproto.unsafe_marshaler",
    Tag:           "varint,64023,opt,name=unsafe_marshaler,json=unsafeMarshaler",
    Filename:      "gogo.proto",
}
var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63023,
    Name:          "gogoproto.unsafe_marshaler_all",
    Tag:           "varint,63023,opt,name=unsafe_marshaler_all,json=unsafeMarshalerAll",
    Filename:      "gogo.proto",
}
var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64024,
    Name:          "gogoproto.unsafe_unmarshaler",
    Tag:           "varint,64024,opt,name=unsafe_unmarshaler,json=unsafeUnmarshaler",
    Filename:      "gogo.proto",
}
var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63024,
    Name:          "gogoproto.unsafe_unmarshaler_all",
    Tag:           "varint,63024,opt,name=unsafe_unmarshaler_all,json=unsafeUnmarshalerAll",
    Filename:      "gogo.proto",
}
var E_VerboseEqual = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.MessageOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         64004,
    Name:          "gogoproto.verbose_equal",
    Tag:           "varint,64004,opt,name=verbose_equal,json=verboseEqual",
    Filename:      "gogo.proto",
}
var E_VerboseEqualAll = &proto.ExtensionDesc{
    ExtendedType:  (*google_protobuf.FileOptions)(nil),
    ExtensionType: (*bool)(nil),
    Field:         63004,
    Name:          "gogoproto.verbose_equal_all",
    Tag:           "varint,63004,opt,name=verbose_equal_all,json=verboseEqualAll",
    Filename:      "gogo.proto",
}

func EnabledGoEnumPrefix

func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool

func EnabledGoStringer

func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func GetCastKey

func GetCastKey(field *google_protobuf.FieldDescriptorProto) string

func GetCastType

func GetCastType(field *google_protobuf.FieldDescriptorProto) string

func GetCastValue

func GetCastValue(field *google_protobuf.FieldDescriptorProto) string

func GetCustomName

func GetCustomName(field *google_protobuf.FieldDescriptorProto) string

func GetCustomType

func GetCustomType(field *google_protobuf.FieldDescriptorProto) string

func GetEnumCustomName

func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string

func GetEnumValueCustomName

func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string

func GetJsonTag

func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string

func GetMoreTags

func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string

func HasBenchGen

func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasCompare

func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasDescription

func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasEnumDecl

func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool

func HasEqual

func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasExtensionsMap

func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasGoGetters

func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasGoString

func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasPopulate

func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasTestGen

func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasTypeDecl

func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasUnrecognized

func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func HasVerboseEqual

func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func ImportsGoGoProto

func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool

func IsCastKey

func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool

func IsCastType

func IsCastType(field *google_protobuf.FieldDescriptorProto) bool

func IsCastValue

func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool

func IsCustomName

func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool

func IsCustomType

func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool

func IsEmbed

func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool

func IsEnumCustomName

func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool

func IsEnumStringer

func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool

func IsEnumValueCustomName

func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool

func IsFace

func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsGoEnumStringer

func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool

func IsMarshaler

func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsNullable

func IsNullable(field *google_protobuf.FieldDescriptorProto) bool

func IsProto3

func IsProto3(file *google_protobuf.FileDescriptorProto) bool

func IsProtoSizer

func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsSizer

func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsStableMarshaler

func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsStdDuration

func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool

func IsStdTime

func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool

func IsStringer

func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsUnion

func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsUnmarshaler

func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsUnsafeMarshaler

func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func IsUnsafeUnmarshaler

func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func NeedsNilCheck

func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool

func RegistersGolangProto

func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool

type EnableFunc

type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool