Further construct, add type resolution
This commit is contained in:
Родитель
b2b619e83e
Коммит
2babfa4458
152
pbinfo/pbinfo.go
152
pbinfo/pbinfo.go
|
@ -7,28 +7,29 @@ import (
|
|||
"go/parser"
|
||||
"go/token"
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type Catalog struct {
|
||||
PkgName string
|
||||
Origin *ast.File
|
||||
Messages []*Message
|
||||
Enums []*Enum
|
||||
ServiceMethods []*ServiceMethod
|
||||
PkgName string
|
||||
origin *ast.File
|
||||
Messages []*Message
|
||||
Enums []*Enum
|
||||
Service *Service
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
Name string
|
||||
Origin *ast.TypeSpec
|
||||
origin *ast.TypeSpec
|
||||
Fields []*Field
|
||||
}
|
||||
|
||||
type Enum struct {
|
||||
Name string
|
||||
Origin *ast.TypeSpec
|
||||
origin *ast.TypeSpec
|
||||
}
|
||||
|
||||
type Map struct {
|
||||
|
@ -37,18 +38,26 @@ type Map struct {
|
|||
Value *FieldType
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
Name string
|
||||
Methods []*ServiceMethod
|
||||
}
|
||||
|
||||
type ServiceMethod struct {
|
||||
Name string
|
||||
Origin *ast.TypeSpec
|
||||
Name string
|
||||
RequestType *FieldType
|
||||
ResponseType *FieldType
|
||||
origin *ast.TypeSpec
|
||||
}
|
||||
|
||||
type Field struct {
|
||||
Name string
|
||||
Type FieldType
|
||||
Origin *ast.Field
|
||||
Type *FieldType
|
||||
origin *ast.Field
|
||||
}
|
||||
|
||||
type FieldType struct {
|
||||
// Name will contain the name of the type, for example "string" or "bool"
|
||||
Name string
|
||||
Enum *Enum
|
||||
Message *Message
|
||||
|
@ -56,7 +65,7 @@ type FieldType struct {
|
|||
StarExpr bool
|
||||
ArrayType bool
|
||||
// May be one of four types: *ast.MapType, *ast.Ident, *ast.StarExpr, or *ast.ArrayType
|
||||
Origin ast.Expr
|
||||
origin ast.Expr
|
||||
}
|
||||
|
||||
func retrieveTypeSpecs(f *ast.File) ([]*ast.TypeSpec, error) {
|
||||
|
@ -94,7 +103,7 @@ func New(goFiles []io.Reader, protoFile io.Reader) (*Catalog, error) {
|
|||
|
||||
typespecs, _ := retrieveTypeSpecs(fileAst)
|
||||
for _, t := range typespecs {
|
||||
//sp.Dump(t)
|
||||
sp.Dump(t)
|
||||
switch typdf := t.Type.(type) {
|
||||
case *ast.Ident:
|
||||
if typdf.Name == "int32" {
|
||||
|
@ -111,13 +120,21 @@ func New(goFiles []io.Reader, protoFile io.Reader) (*Catalog, error) {
|
|||
}
|
||||
rv.Messages = append(rv.Messages, nmsg)
|
||||
case *ast.InterfaceType:
|
||||
nmeth, err := NewServiceMethod(t)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error parsing service method %q", t.Name.Name)
|
||||
// Each service will have two interfaces ("{SVCNAME}Server" and
|
||||
// "{SVCNAME}Client") each containing the same information that we
|
||||
// care about, but structured a bit differently. For simplicity,
|
||||
// skip the "Client" interface.
|
||||
if strings.HasSuffix("Client", t.Name.Name) {
|
||||
break
|
||||
}
|
||||
rv.ServiceMethods = append(rv.ServiceMethods, nmeth)
|
||||
nsvc, err := NewService(t)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error parsing service %q", t.Name.Name)
|
||||
}
|
||||
rv.Service = nsvc
|
||||
}
|
||||
}
|
||||
resolveTypes(&rv)
|
||||
sp.Dump(rv)
|
||||
|
||||
return &rv, nil
|
||||
|
@ -137,7 +154,8 @@ func NewMessage(m *ast.TypeSpec) (*Message, error) {
|
|||
}
|
||||
sp := spew.ConfigState{Indent: " "}
|
||||
|
||||
sp.Dump(m)
|
||||
_ = sp
|
||||
//sp.Dump(m)
|
||||
strct := m.Type.(*ast.StructType)
|
||||
for _, f := range strct.Fields.List {
|
||||
nfield, err := NewField(f)
|
||||
|
@ -157,32 +175,110 @@ func NewMap(m *ast.TypeSpec) (*Map, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func NewServiceMethod(s *ast.TypeSpec) (*ServiceMethod, error) {
|
||||
return &ServiceMethod{
|
||||
// NewService returns a new Service struct derived from an *ast.TypeSpec with a
|
||||
// Type of *ast.InterfaceType.
|
||||
func NewService(s *ast.TypeSpec) (*Service, error) {
|
||||
rv := &Service{
|
||||
Name: s.Name.Name,
|
||||
//Origin: s,
|
||||
}, nil
|
||||
}
|
||||
asvc := s.Type.(*ast.InterfaceType)
|
||||
for _, m := range asvc.Methods.List {
|
||||
nmeth, err := NewServiceMethod(m)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "Couldn't create service method %q of service %q", m.Names[0].Name, rv.Name)
|
||||
}
|
||||
rv.Methods = append(rv.Methods, nmeth)
|
||||
}
|
||||
return rv, nil
|
||||
}
|
||||
|
||||
// NewServiceMethod returns a new ServiceMethod derived from the provided
|
||||
// *ast.Field. The given *ast.Field is intended to have a Type of *ast.FuncType
|
||||
// from an *ast.InterfaceType's Methods.List attribute. Providing an *ast.Field
|
||||
// with a different structure may return an error.
|
||||
func NewServiceMethod(m *ast.Field) (*ServiceMethod, error) {
|
||||
rv := &ServiceMethod{
|
||||
Name: m.Names[0].Name,
|
||||
}
|
||||
ft, ok := m.Type.(*ast.FuncType)
|
||||
if !ok {
|
||||
return nil, errors.New("Provided *ast.Field.Type is not of type *ast.FuncType; cannot proceed")
|
||||
}
|
||||
|
||||
input := ft.Params.List
|
||||
output := ft.Results.List
|
||||
|
||||
// Zero'th param of a serverMethod is Context.context, while first param is
|
||||
// this methods RequestType
|
||||
rq := input[1]
|
||||
rs := output[0]
|
||||
|
||||
makeFieldType := func(in *ast.Field) (*FieldType, error) {
|
||||
star, ok := in.Type.(*ast.StarExpr)
|
||||
if !ok {
|
||||
return nil, errors.New("could not create FieldType, in.Type is not *ast.StarExpr")
|
||||
}
|
||||
ident, ok := star.X.(*ast.Ident)
|
||||
if !ok {
|
||||
return nil, errors.New("could not create FieldType, star.Type is not *ast.Ident")
|
||||
}
|
||||
return &FieldType{
|
||||
Name: ident.Name,
|
||||
StarExpr: true,
|
||||
origin: in.Type,
|
||||
}, nil
|
||||
}
|
||||
|
||||
var err error
|
||||
rv.RequestType, err = makeFieldType(rq)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "RequestType creation of service method %q failed", rv.Name)
|
||||
}
|
||||
rv.ResponseType, err = makeFieldType(rs)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "ResponseType creation of service method %q failed", rv.Name)
|
||||
}
|
||||
|
||||
return rv, nil
|
||||
}
|
||||
|
||||
// NewField returns a Field struct with information distilled from an
|
||||
// *ast.Field. The following is an informational table of how the proto-to-go
|
||||
// concepts map to the Types of an ast.Field. An arrow indicates "nested
|
||||
// within".
|
||||
//
|
||||
// | Type Genres | Repeated | Naked |
|
||||
// |-------------|------------------------|---------------|
|
||||
// | Enum | Array -> Ident | Ident |
|
||||
// | Message | Array -> Star -> Ident | Star -> Ident |
|
||||
// | BaseType | Array -> Ident | Ident |
|
||||
//
|
||||
// Map types will always have a Key which is ident, and a value that is one of
|
||||
// the Type Genres specified in the table above.
|
||||
func NewField(f *ast.Field) (*Field, error) {
|
||||
rv := &Field{
|
||||
Name: f.Names[0].Name,
|
||||
Type: &FieldType{},
|
||||
}
|
||||
|
||||
typeFollower := func(e ast.Expr, typeFollower func(ast.Expr)) {
|
||||
switch etyp := e.(type) {
|
||||
// TypeFollower 'follows' the type of the provided ast.Field, determining
|
||||
// the name of this fields type and if it's a StarExpr, an ArrayType, or
|
||||
// both.
|
||||
var typeFollower func(ast.Expr)
|
||||
typeFollower = func(e ast.Expr) {
|
||||
switch ex := e.(type) {
|
||||
case *ast.Ident:
|
||||
rv.Type.Name = etyp.Name
|
||||
rv.Type.Name = ex.Name
|
||||
case *ast.StarExpr:
|
||||
rv.Type.StarExpr = true
|
||||
typeFollower(etyp.X)
|
||||
typeFollower(ex.X)
|
||||
case *ast.ArrayType:
|
||||
rv.Type.ArrayType = true
|
||||
typeFollower(etyp.Elt)
|
||||
typeFollower(ex.Elt)
|
||||
case *ast.MapType:
|
||||
// TODO call NewMap here
|
||||
}
|
||||
}
|
||||
typeFollower(f.Type, typeFollower)
|
||||
typeFollower(f.Type)
|
||||
return rv, nil
|
||||
}
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
package pbinfo
|
||||
|
||||
// After the initial creation of Catalog, each FieldType will have it's name
|
||||
// set to the name of the type that it represents, but it won't have a pointer
|
||||
// to the full instance of the type with that name. Type resolution is the
|
||||
// process of taking the name of each FieldType, then searching for the
|
||||
// enum/message with that name and setting the respective *Message/*Enum
|
||||
// property of our FieldType to point to that enum/message.
|
||||
|
||||
type typeBox struct {
|
||||
Message *Message
|
||||
Enum *Enum
|
||||
}
|
||||
|
||||
// resolveTypes accepts a pointer to a Catalog and modifies that Catalog, and
|
||||
// it's child structs, in place.
|
||||
func resolveTypes(cat *Catalog) {
|
||||
tmap := newTypeMap(cat)
|
||||
for _, m := range cat.Messages {
|
||||
for _, f := range m.Fields {
|
||||
setType(f.Type, tmap)
|
||||
}
|
||||
}
|
||||
for _, m := range cat.Service.Methods {
|
||||
setType(m.RequestType, tmap)
|
||||
setType(m.ResponseType, tmap)
|
||||
}
|
||||
}
|
||||
|
||||
func setType(f *FieldType, tmap map[string]typeBox) {
|
||||
entry, ok := tmap[f.Name]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case entry.Enum != nil:
|
||||
f.Enum = entry.Enum
|
||||
case entry.Message != nil:
|
||||
f.Message = entry.Message
|
||||
}
|
||||
}
|
||||
|
||||
// newTypeMap returns a map from
|
||||
func newTypeMap(cat *Catalog) map[string]typeBox {
|
||||
rv := make(map[string]typeBox)
|
||||
for _, m := range cat.Messages {
|
||||
rv[m.Name] = typeBox{Message: m}
|
||||
}
|
||||
for _, e := range cat.Enums {
|
||||
rv[e.Name] = typeBox{Enum: e}
|
||||
}
|
||||
return rv
|
||||
}
|
|
@ -20,6 +20,7 @@ It has these top-level messages:
|
|||
NestedMapMessageC
|
||||
MapTypeResponse
|
||||
MapNestedMsg
|
||||
RepeatedTypes
|
||||
*/
|
||||
package TEST
|
||||
|
||||
|
@ -687,6 +688,17 @@ func (m *MapNestedMsg) GetBeta() map[int64]*NestedMessageA {
|
|||
return nil
|
||||
}
|
||||
|
||||
type RepeatedTypes struct {
|
||||
AA []int64 `protobuf:"varint,1,rep,packed,name=AA" json:"AA,omitempty"`
|
||||
BB []string `protobuf:"bytes,2,rep,name=BB" json:"BB,omitempty"`
|
||||
CC []EnumType `protobuf:"varint,3,rep,packed,name=CC,enum=TEST.EnumType" json:"CC,omitempty"`
|
||||
}
|
||||
|
||||
func (m *RepeatedTypes) Reset() { *m = RepeatedTypes{} }
|
||||
func (m *RepeatedTypes) String() string { return proto.CompactTextString(m) }
|
||||
func (*RepeatedTypes) ProtoMessage() {}
|
||||
func (*RepeatedTypes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*NestedTypeRequest)(nil), "TEST.NestedTypeRequest")
|
||||
proto.RegisterType((*NestedMessageA)(nil), "TEST.NestedMessageA")
|
||||
|
@ -699,6 +711,7 @@ func init() {
|
|||
proto.RegisterType((*NestedMapMessageC)(nil), "TEST.NestedMapMessageC")
|
||||
proto.RegisterType((*MapTypeResponse)(nil), "TEST.MapTypeResponse")
|
||||
proto.RegisterType((*MapNestedMsg)(nil), "TEST.MapNestedMsg")
|
||||
proto.RegisterType((*RepeatedTypes)(nil), "TEST.RepeatedTypes")
|
||||
proto.RegisterEnum("TEST.EnumType", EnumType_name, EnumType_value)
|
||||
}
|
||||
|
||||
|
@ -876,82 +889,85 @@ var _Map_serviceDesc = grpc.ServiceDesc{
|
|||
func init() { proto.RegisterFile("svc.proto", fileDescriptor0) }
|
||||
|
||||
var fileDescriptor0 = []byte{
|
||||
// 1232 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x99, 0xdd, 0x52, 0x23, 0x45,
|
||||
0x1f, 0x87, 0xdf, 0x49, 0xf3, 0x31, 0xf4, 0xf2, 0x11, 0xe6, 0x05, 0xb7, 0x8b, 0xc2, 0x59, 0x8c,
|
||||
0xa2, 0x88, 0x4e, 0x18, 0x71, 0x9d, 0xb2, 0x38, 0x9b, 0xef, 0x6f, 0xcb, 0x8a, 0xdc, 0x40, 0xd4,
|
||||
0x29, 0x6a, 0xcb, 0x35, 0x89, 0x9b, 0xb0, 0x16, 0x1e, 0x7a, 0x03, 0x1e, 0x78, 0x15, 0x5e, 0x8f,
|
||||
0x5e, 0x82, 0xe7, 0xde, 0x82, 0xf5, 0x9f, 0xf4, 0xc0, 0x9f, 0x61, 0xba, 0x5b, 0xab, 0xf4, 0xc0,
|
||||
0x2a, 0x8e, 0x60, 0xc9, 0xf3, 0x9b, 0xce, 0x86, 0x67, 0xc9, 0xc3, 0x2c, 0xdd, 0x98, 0xbf, 0xfe,
|
||||
0x6a, 0x38, 0x7b, 0x35, 0x5d, 0x4c, 0x8d, 0x95, 0xcb, 0xf0, 0x8b, 0xcb, 0x83, 0xc3, 0xab, 0xe9,
|
||||
0xf4, 0xea, 0x65, 0x75, 0x36, 0x9e, 0xbd, 0x38, 0x1b, 0x4f, 0x26, 0xd3, 0xc5, 0x78, 0xf1, 0x62,
|
||||
0x3a, 0x99, 0x2f, 0x99, 0xc1, 0x0d, 0xdd, 0xfd, 0xac, 0x9a, 0x2f, 0xaa, 0xaf, 0x2f, 0x6f, 0x66,
|
||||
0xd5, 0xa8, 0xfa, 0xee, 0xba, 0x9a, 0x2f, 0x8c, 0x01, 0xd5, 0x5c, 0xa6, 0x1d, 0x69, 0x27, 0x4f,
|
||||
0xce, 0xf7, 0x86, 0x70, 0x91, 0xe1, 0x92, 0x29, 0xab, 0xf9, 0x7c, 0x7c, 0x55, 0xb9, 0x23, 0xcd,
|
||||
0x05, 0xc6, 0x63, 0xbb, 0x47, 0x44, 0xc0, 0x78, 0x23, 0xcd, 0x33, 0x0e, 0xa9, 0xe6, 0x33, 0xe3,
|
||||
0x48, 0x3b, 0xd9, 0x3e, 0xdf, 0x5e, 0x32, 0xe1, 0xe4, 0xfa, 0xdb, 0xfa, 0x24, 0xcd, 0x1f, 0x3c,
|
||||
0xa7, 0xdb, 0xf7, 0x2f, 0xab, 0x3a, 0xd7, 0x1f, 0x69, 0xee, 0x83, 0x95, 0xd7, 0xac, 0x88, 0x6c,
|
||||
0x65, 0xb6, 0x56, 0xbe, 0xb1, 0xd9, 0x9c, 0x45, 0xe0, 0xf1, 0x1f, 0xa8, 0x81, 0x5f, 0x86, 0xf9,
|
||||
0x6c, 0x3a, 0x99, 0x57, 0xcb, 0x2b, 0xf7, 0xff, 0xed, 0xd7, 0xe1, 0xb7, 0x7d, 0xba, 0x5d, 0x8e,
|
||||
0x67, 0xf8, 0x1b, 0x70, 0x7c, 0xf7, 0x42, 0x3c, 0xbd, 0x77, 0xd1, 0xf1, 0x0c, 0x9f, 0x7d, 0x0c,
|
||||
0x67, 0xf7, 0xea, 0xb3, 0x05, 0x58, 0x7d, 0xfc, 0x87, 0xb4, 0xe7, 0xba, 0xec, 0x49, 0xcd, 0x1d,
|
||||
0x2e, 0xb9, 0xfb, 0xe7, 0x0d, 0x5d, 0x37, 0x9c, 0x2c, 0x5e, 0xdd, 0x8c, 0x7a, 0xae, 0x0b, 0xb4,
|
||||
0xe7, 0xb1, 0x4d, 0x09, 0xed, 0x79, 0x9c, 0xf6, 0xea, 0x6b, 0xfb, 0x3e, 0xdb, 0x92, 0xd0, 0xbe,
|
||||
0xcf, 0x69, 0xdf, 0x07, 0x3a, 0x08, 0xd8, 0xb6, 0x84, 0x0e, 0x02, 0x4e, 0x07, 0x01, 0xd0, 0x61,
|
||||
0xc8, 0x76, 0x24, 0x74, 0x18, 0x72, 0x3a, 0x0c, 0x81, 0x8e, 0x22, 0xd6, 0x97, 0xd0, 0x51, 0xc4,
|
||||
0xe9, 0x28, 0x02, 0x3a, 0x8e, 0xf9, 0xf7, 0xad, 0x9b, 0x8e, 0x63, 0x4e, 0xc7, 0x31, 0xd0, 0x49,
|
||||
0xc2, 0x0c, 0x09, 0x9d, 0x24, 0x9c, 0x4e, 0x12, 0xa0, 0xd3, 0x94, 0xfd, 0x5f, 0x42, 0xa7, 0x29,
|
||||
0xa7, 0xd3, 0x14, 0xe8, 0x2c, 0x63, 0x7b, 0x12, 0x3a, 0xcb, 0x38, 0x9d, 0x65, 0x40, 0xe7, 0x39,
|
||||
0xdb, 0x97, 0xd0, 0x79, 0xce, 0xe9, 0x3c, 0x07, 0xba, 0x28, 0xd8, 0x1b, 0x12, 0xba, 0x28, 0x38,
|
||||
0x5d, 0x14, 0x40, 0x97, 0x25, 0x7b, 0x2a, 0xa1, 0xcb, 0x92, 0xd3, 0x65, 0x69, 0x9c, 0x51, 0xe2,
|
||||
0xba, 0x2e, 0x7b, 0x56, 0xe3, 0x6f, 0x0a, 0xb4, 0xe2, 0x5e, 0x01, 0x09, 0x03, 0xcf, 0xf3, 0xd8,
|
||||
0x91, 0x64, 0xe0, 0x35, 0x6a, 0x01, 0x09, 0x03, 0xdf, 0xf7, 0xd9, 0x5b, 0x92, 0x81, 0xdf, 0xd8,
|
||||
0x05, 0x24, 0x0c, 0x82, 0x20, 0x60, 0x03, 0xc9, 0x20, 0x68, 0x04, 0x03, 0x12, 0x06, 0x61, 0x18,
|
||||
0xb2, 0xb7, 0x25, 0x83, 0xb0, 0x71, 0x0c, 0x48, 0x18, 0x44, 0x51, 0xc4, 0xde, 0x91, 0x0c, 0xa2,
|
||||
0x46, 0x33, 0x20, 0x61, 0x10, 0xc7, 0x31, 0x3b, 0x96, 0x0c, 0xe2, 0xc6, 0x34, 0x20, 0x61, 0x90,
|
||||
0x24, 0x09, 0x7b, 0x57, 0x32, 0x48, 0x1a, 0xd9, 0x80, 0x84, 0x41, 0x9a, 0xa6, 0xec, 0x3d, 0xc9,
|
||||
0x20, 0x6d, 0x7c, 0x03, 0x12, 0x06, 0x59, 0x96, 0xb1, 0x13, 0xc9, 0x20, 0x6b, 0x94, 0x03, 0x12,
|
||||
0x06, 0x79, 0x9e, 0xb3, 0xf7, 0x25, 0x83, 0xbc, 0xb1, 0x0e, 0x48, 0x18, 0x14, 0x45, 0xc1, 0x4e,
|
||||
0x25, 0x83, 0xa2, 0x11, 0x0f, 0x48, 0x18, 0x94, 0x65, 0xc9, 0x3e, 0x90, 0x0c, 0xca, 0xc6, 0x3d,
|
||||
0x20, 0x0f, 0x3e, 0xa1, 0xeb, 0xdc, 0x2d, 0xa3, 0x4f, 0xc9, 0x37, 0xd5, 0x4d, 0xfd, 0xd3, 0x72,
|
||||
0x63, 0x04, 0x9f, 0x1a, 0x7b, 0x74, 0xf5, 0xf5, 0xf8, 0xe5, 0x75, 0xc5, 0x7a, 0x47, 0xda, 0x89,
|
||||
0x36, 0x5a, 0xfe, 0xe1, 0xa2, 0xf7, 0xa9, 0x06, 0x33, 0x6e, 0x98, 0x6a, 0xd6, 0x6b, 0xcd, 0xb8,
|
||||
0x67, 0xaa, 0xd9, 0x6a, 0x6b, 0xc6, 0x6d, 0x53, 0xcd, 0x48, 0x6b, 0xc6, 0x9d, 0x53, 0xcd, 0xb6,
|
||||
0x5a, 0x33, 0x6e, 0x9e, 0x6a, 0xb6, 0xd2, 0x9a, 0x71, 0xff, 0x54, 0xb3, 0xdd, 0xd6, 0x8c, 0x5b,
|
||||
0xa8, 0x9a, 0x19, 0xad, 0x19, 0x77, 0x51, 0x35, 0x5b, 0x6f, 0xcd, 0xb8, 0x91, 0xaa, 0xd9, 0x5a,
|
||||
0x6b, 0xc6, 0xbd, 0x54, 0xcd, 0x76, 0x5a, 0x33, 0x6e, 0xa7, 0x6a, 0xa6, 0xb7, 0x66, 0xdc, 0x51,
|
||||
0xd5, 0x6c, 0x03, 0xcf, 0x1c, 0xaa, 0xbb, 0x1d, 0x2e, 0x13, 0x95, 0xcb, 0x0e, 0xd5, 0xbd, 0x0e,
|
||||
0x99, 0x89, 0x4a, 0x66, 0x87, 0xea, 0x7e, 0x87, 0xcd, 0x44, 0x65, 0xb3, 0x43, 0xf5, 0xa0, 0x43,
|
||||
0x67, 0xa2, 0xd2, 0xd9, 0xa1, 0x7a, 0xd8, 0xe1, 0x33, 0x51, 0xf9, 0xec, 0x50, 0x3d, 0xea, 0x10,
|
||||
0x9a, 0xa8, 0x84, 0x76, 0xa8, 0x1e, 0x77, 0x18, 0x4d, 0x54, 0x46, 0x3b, 0x54, 0x4f, 0x3a, 0x94,
|
||||
0x26, 0x2a, 0xa5, 0x1d, 0xaa, 0xa7, 0x1d, 0x4e, 0x13, 0x95, 0xd3, 0x0e, 0xd5, 0xb3, 0x0e, 0xa9,
|
||||
0x89, 0x4a, 0x6a, 0x87, 0xea, 0x79, 0x87, 0xd5, 0x44, 0x65, 0xb5, 0x43, 0xf5, 0xa2, 0x43, 0x6b,
|
||||
0xa2, 0xd2, 0xda, 0xa1, 0x7a, 0xd9, 0xe1, 0x35, 0x51, 0x78, 0x3d, 0xb8, 0x68, 0x7e, 0xb3, 0x40,
|
||||
0xd1, 0xfa, 0x17, 0xc2, 0xb6, 0xce, 0xf5, 0x8e, 0xad, 0xd7, 0x6c, 0x89, 0x62, 0xfb, 0xfd, 0xc3,
|
||||
0x2d, 0x84, 0xe7, 0xed, 0xd6, 0x14, 0x6c, 0x87, 0xbc, 0x55, 0x34, 0xf7, 0xe0, 0x39, 0x5d, 0x73,
|
||||
0xff, 0xf6, 0x3f, 0xe4, 0xc1, 0x1f, 0xfb, 0x74, 0xe7, 0xf6, 0x4d, 0x8b, 0xff, 0x06, 0xf1, 0xcf,
|
||||
0x86, 0xbc, 0x85, 0x42, 0xbe, 0xfd, 0x2e, 0xb9, 0x3c, 0xf0, 0x5e, 0xc9, 0x5b, 0xa8, 0xe4, 0x05,
|
||||
0x38, 0x4e, 0x79, 0x0b, 0xa5, 0xbc, 0x00, 0xc7, 0x2d, 0x6f, 0xa1, 0x96, 0x17, 0xe0, 0x38, 0xe6,
|
||||
0x2d, 0x14, 0xf3, 0x02, 0x1c, 0xd7, 0xbc, 0x85, 0x6a, 0x5e, 0x80, 0xe3, 0x9c, 0xb7, 0x50, 0xce,
|
||||
0x0b, 0x70, 0xdc, 0xf3, 0x16, 0xea, 0x79, 0x01, 0x8e, 0x83, 0xde, 0x42, 0x41, 0x2f, 0xc0, 0x71,
|
||||
0xd1, 0x5b, 0xa8, 0xe8, 0x05, 0x38, 0x4e, 0x7a, 0x0b, 0x25, 0xbd, 0x00, 0xc7, 0x4d, 0x6f, 0xa1,
|
||||
0xa6, 0x17, 0xe0, 0x38, 0xea, 0x2d, 0x14, 0xf5, 0x02, 0x1c, 0x57, 0xbd, 0x8d, 0xab, 0xde, 0x14,
|
||||
0x39, 0x86, 0xb3, 0xde, 0xc6, 0x59, 0x6f, 0x8a, 0x34, 0xc3, 0x5d, 0x6f, 0xe3, 0xae, 0x37, 0x45,
|
||||
0xa6, 0xe1, 0xb0, 0xb7, 0x71, 0xd8, 0x9b, 0x22, 0xd9, 0x70, 0xd9, 0xdb, 0xb8, 0xec, 0x4d, 0xa1,
|
||||
0x6f, 0x28, 0xed, 0x6d, 0x9c, 0xf6, 0xa6, 0x48, 0x39, 0xdc, 0xf6, 0x36, 0x6e, 0x7b, 0x53, 0x64,
|
||||
0x1d, 0x8e, 0x7b, 0x1b, 0xc7, 0xbd, 0x29, 0x12, 0x0f, 0xd7, 0xbd, 0x8d, 0xeb, 0xde, 0x14, 0xb9,
|
||||
0x87, 0xf3, 0xde, 0xc6, 0x79, 0x6f, 0x8a, 0xf4, 0xc3, 0x7d, 0x6f, 0xe3, 0xbe, 0x37, 0x45, 0x06,
|
||||
0xe2, 0xc0, 0xb7, 0x71, 0xe0, 0x9b, 0x22, 0x09, 0x71, 0xe1, 0xdb, 0xb8, 0xf0, 0x4d, 0x91, 0x87,
|
||||
0x8f, 0x89, 0xff, 0x98, 0xf8, 0x8f, 0x89, 0xff, 0x98, 0xf8, 0x8f, 0x89, 0xff, 0x9f, 0x48, 0xfc,
|
||||
0x9f, 0x34, 0xba, 0x59, 0x8e, 0x67, 0xbc, 0x55, 0xe7, 0x57, 0x86, 0x4d, 0x57, 0xbc, 0x6a, 0x31,
|
||||
0xe6, 0x29, 0x7b, 0x77, 0x0f, 0xf1, 0x96, 0x18, 0xc2, 0xc3, 0xcb, 0x1f, 0xf2, 0x35, 0x79, 0x50,
|
||||
0xd2, 0x8d, 0xdb, 0x2f, 0x75, 0x9c, 0x7d, 0x8a, 0xcf, 0x16, 0xdd, 0x85, 0xbf, 0x7b, 0x46, 0xa7,
|
||||
0xcf, 0xa8, 0xde, 0xdc, 0x5a, 0x37, 0x56, 0xa9, 0xe6, 0xf6, 0xff, 0x07, 0x1f, 0xbc, 0xbe, 0x06,
|
||||
0x1f, 0xfc, 0x7e, 0xef, 0xfc, 0x97, 0x1e, 0x25, 0xe5, 0x78, 0x66, 0xb8, 0x74, 0x2d, 0xae, 0x16,
|
||||
0xf0, 0xd9, 0x5e, 0xd7, 0xed, 0xa6, 0x83, 0xfd, 0xce, 0xb7, 0xa8, 0x01, 0xfd, 0xf1, 0xd7, 0xdf,
|
||||
0x7f, 0xee, 0xad, 0x18, 0xbd, 0xb3, 0x8f, 0x8c, 0x80, 0xae, 0x7f, 0x3e, 0x9d, 0x4b, 0xae, 0xd1,
|
||||
0xf9, 0xd5, 0xc1, 0x56, 0x7d, 0x89, 0xf5, 0x41, 0xef, 0xec, 0xfc, 0x42, 0x3b, 0x35, 0x32, 0xba,
|
||||
0x11, 0x57, 0x8b, 0xe5, 0xdf, 0xc8, 0xb8, 0x17, 0xff, 0xf8, 0x52, 0xec, 0xe1, 0x03, 0x1d, 0xcf,
|
||||
0xa8, 0xa4, 0x14, 0x9e, 0x91, 0xea, 0x62, 0xa2, 0x07, 0x5a, 0x4f, 0xed, 0xcb, 0xb5, 0xfa, 0xbf,
|
||||
0x88, 0x3e, 0xfe, 0x33, 0x00, 0x00, 0xff, 0xff, 0x56, 0xdd, 0x29, 0xb1, 0x53, 0x1a, 0x00, 0x00,
|
||||
// 1271 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x99, 0xdd, 0x6e, 0xe3, 0x44,
|
||||
0x1c, 0x47, 0xb1, 0xa7, 0xdb, 0x3a, 0xb3, 0xdb, 0x34, 0x35, 0x2d, 0x3b, 0xaa, 0x8a, 0x37, 0x04,
|
||||
0x0a, 0xa5, 0xe0, 0xd4, 0x94, 0xc5, 0x42, 0xbd, 0xf3, 0x57, 0x9c, 0x38, 0x36, 0xa0, 0xd0, 0x17,
|
||||
0x30, 0x60, 0x55, 0x2b, 0x96, 0x24, 0xac, 0xd3, 0x45, 0xe5, 0x92, 0x17, 0xe0, 0x82, 0xa7, 0xe0,
|
||||
0x79, 0xe0, 0x11, 0xb8, 0xe7, 0x15, 0xd0, 0xdf, 0x19, 0x77, 0xff, 0x75, 0x3d, 0x33, 0x20, 0xc1,
|
||||
0x05, 0x52, 0xaf, 0xfa, 0x91, 0xf3, 0xf3, 0x44, 0xe9, 0xd9, 0xf6, 0xc4, 0x4b, 0x3b, 0xe5, 0xcb,
|
||||
0xaf, 0x87, 0xcb, 0x17, 0x8b, 0xd5, 0xc2, 0xdc, 0xb8, 0x88, 0xbe, 0xbc, 0x38, 0x38, 0xbc, 0x5c,
|
||||
0x2c, 0x2e, 0x9f, 0x17, 0xa7, 0xf9, 0xf2, 0xd9, 0x69, 0x3e, 0x9f, 0x2f, 0x56, 0xf9, 0xea, 0xd9,
|
||||
0x62, 0x5e, 0xae, 0x99, 0xc1, 0x35, 0xdd, 0xfd, 0xac, 0x28, 0x57, 0xc5, 0x37, 0x17, 0xd7, 0xcb,
|
||||
0x62, 0x56, 0x7c, 0x7f, 0x55, 0x94, 0x2b, 0x73, 0x40, 0x35, 0x8f, 0x69, 0x7d, 0xed, 0xf8, 0xe1,
|
||||
0xd9, 0xde, 0x10, 0x2e, 0x32, 0x5c, 0x33, 0x59, 0x51, 0x96, 0xf9, 0x65, 0xe1, 0xcd, 0x34, 0x0f,
|
||||
0x18, 0x9f, 0xed, 0xf6, 0x89, 0x80, 0xf1, 0x67, 0x9a, 0x6f, 0x1e, 0x52, 0x2d, 0x60, 0x66, 0x5f,
|
||||
0x3b, 0xee, 0x9e, 0x75, 0xd7, 0x4c, 0x34, 0xbf, 0xfa, 0xae, 0x3a, 0x49, 0x0b, 0x06, 0x4f, 0x69,
|
||||
0xf7, 0xf6, 0x65, 0x55, 0xe7, 0x06, 0x33, 0xcd, 0xbb, 0xb3, 0xf2, 0xeb, 0x15, 0x91, 0xad, 0xac,
|
||||
0xc6, 0x2a, 0x30, 0x1f, 0xd5, 0x67, 0x11, 0x78, 0xfc, 0x47, 0x6a, 0xe2, 0x97, 0xa1, 0x5c, 0x2e,
|
||||
0xe6, 0x65, 0xb1, 0xbe, 0x72, 0xef, 0xbf, 0x7e, 0x1d, 0x7e, 0xdf, 0xa7, 0xdd, 0x2c, 0x5f, 0xe2,
|
||||
0x1f, 0xc0, 0xd1, 0xab, 0x17, 0xe2, 0xf1, 0xad, 0x8b, 0xe6, 0x4b, 0x7c, 0xf6, 0x11, 0x9c, 0xad,
|
||||
0x57, 0x67, 0x0b, 0xb0, 0xea, 0xf8, 0x0f, 0xa9, 0xee, 0x79, 0xec, 0x61, 0xc5, 0x1d, 0xae, 0xb9,
|
||||
0xdb, 0xe7, 0x0d, 0x3d, 0x2f, 0x9a, 0xaf, 0x5e, 0x5c, 0xcf, 0x74, 0xcf, 0x03, 0xda, 0xf7, 0xd9,
|
||||
0x23, 0x09, 0xed, 0xfb, 0x9c, 0xf6, 0xab, 0x6b, 0x07, 0x01, 0xdb, 0x96, 0xd0, 0x41, 0xc0, 0xe9,
|
||||
0x20, 0x00, 0x3a, 0x0c, 0x59, 0x57, 0x42, 0x87, 0x21, 0xa7, 0xc3, 0x10, 0xe8, 0x28, 0x62, 0x3b,
|
||||
0x12, 0x3a, 0x8a, 0x38, 0x1d, 0x45, 0x40, 0x8f, 0x46, 0xac, 0x27, 0xa1, 0x47, 0x23, 0x4e, 0x8f,
|
||||
0x46, 0x40, 0xc7, 0x31, 0xff, 0xb9, 0xb5, 0xd3, 0x71, 0xcc, 0xe9, 0x38, 0x06, 0x7a, 0x3c, 0x66,
|
||||
0xa6, 0x84, 0x1e, 0x8f, 0x39, 0x3d, 0x1e, 0x03, 0x3d, 0x99, 0xb0, 0xd7, 0x25, 0xf4, 0x64, 0xc2,
|
||||
0xe9, 0xc9, 0x04, 0xe8, 0x24, 0x61, 0x7b, 0x12, 0x3a, 0x49, 0x38, 0x9d, 0x24, 0x40, 0x4f, 0xa7,
|
||||
0x6c, 0x5f, 0x42, 0x4f, 0xa7, 0x9c, 0x9e, 0x4e, 0x81, 0x4e, 0x53, 0xf6, 0x86, 0x84, 0x4e, 0x53,
|
||||
0x4e, 0xa7, 0x29, 0xd0, 0x59, 0xc6, 0x1e, 0x4b, 0xe8, 0x2c, 0xe3, 0x74, 0x96, 0x99, 0xa7, 0x94,
|
||||
0x78, 0x9e, 0xc7, 0x9e, 0x54, 0xf8, 0x9b, 0x02, 0xad, 0xb8, 0x57, 0x40, 0xc2, 0xc0, 0xf7, 0x7d,
|
||||
0xd6, 0x97, 0x0c, 0xfc, 0x5a, 0x2d, 0x20, 0x61, 0x10, 0x04, 0x01, 0x7b, 0x4b, 0x32, 0x08, 0x6a,
|
||||
0xbb, 0x80, 0x84, 0x41, 0x18, 0x86, 0x6c, 0x20, 0x19, 0x84, 0xb5, 0x60, 0x40, 0xc2, 0x20, 0x8a,
|
||||
0x22, 0xf6, 0xb6, 0x64, 0x10, 0xd5, 0x8e, 0x01, 0x09, 0x83, 0xd1, 0x68, 0xc4, 0xde, 0x91, 0x0c,
|
||||
0x46, 0xb5, 0x66, 0x40, 0xc2, 0x20, 0x8e, 0x63, 0x76, 0x24, 0x19, 0xc4, 0xb5, 0x69, 0x40, 0xc2,
|
||||
0x60, 0x3c, 0x1e, 0xb3, 0x77, 0x25, 0x83, 0x71, 0x2d, 0x1b, 0x90, 0x30, 0x98, 0x4c, 0x26, 0xec,
|
||||
0x3d, 0xc9, 0x60, 0x52, 0xfb, 0x06, 0x24, 0x0c, 0x92, 0x24, 0x61, 0xc7, 0x92, 0x41, 0x52, 0x2b,
|
||||
0x07, 0x24, 0x0c, 0xa6, 0xd3, 0x29, 0x7b, 0x5f, 0x32, 0x98, 0xd6, 0xd6, 0x01, 0x09, 0x83, 0x34,
|
||||
0x4d, 0xd9, 0x89, 0x64, 0x90, 0xd6, 0xe2, 0x01, 0x09, 0x83, 0x2c, 0xcb, 0xd8, 0x07, 0x92, 0x41,
|
||||
0x56, 0xbb, 0x07, 0xe4, 0xc1, 0x27, 0x74, 0x8b, 0xbb, 0x65, 0xf6, 0x28, 0xf9, 0xb6, 0xb8, 0xae,
|
||||
0x7e, 0x5b, 0x76, 0x66, 0xf0, 0xa9, 0xb9, 0x47, 0x1f, 0xbc, 0xcc, 0x9f, 0x5f, 0x15, 0x4c, 0xef,
|
||||
0x6b, 0xc7, 0xda, 0x6c, 0xfd, 0xc5, 0xb9, 0xfe, 0xa9, 0x06, 0x33, 0x6e, 0x98, 0x6a, 0xa6, 0x37,
|
||||
0x66, 0xdc, 0x33, 0xd5, 0xec, 0x41, 0x63, 0xc6, 0x6d, 0x53, 0xcd, 0x48, 0x63, 0xc6, 0x9d, 0x53,
|
||||
0xcd, 0xb6, 0x1b, 0x33, 0x6e, 0x9e, 0x6a, 0xb6, 0xd1, 0x98, 0x71, 0xff, 0x54, 0xb3, 0xdd, 0xc6,
|
||||
0x8c, 0x5b, 0xa8, 0x9a, 0x99, 0x8d, 0x19, 0x77, 0x51, 0x35, 0xdb, 0x6a, 0xcc, 0xb8, 0x91, 0xaa,
|
||||
0xd9, 0x66, 0x63, 0xc6, 0xbd, 0x54, 0xcd, 0x76, 0x1a, 0x33, 0x6e, 0xa7, 0x6a, 0x66, 0x34, 0x66,
|
||||
0xdc, 0x51, 0xd5, 0xac, 0x83, 0x67, 0x2e, 0x35, 0xbc, 0x16, 0x97, 0x89, 0xca, 0x65, 0x97, 0x1a,
|
||||
0x7e, 0x8b, 0xcc, 0x44, 0x25, 0xb3, 0x4b, 0x8d, 0xa0, 0xc5, 0x66, 0xa2, 0xb2, 0xd9, 0xa5, 0x46,
|
||||
0xd8, 0xa2, 0x33, 0x51, 0xe9, 0xec, 0x52, 0x23, 0x6a, 0xf1, 0x99, 0xa8, 0x7c, 0x76, 0xa9, 0x31,
|
||||
0x6a, 0x11, 0x9a, 0xa8, 0x84, 0x76, 0xa9, 0x11, 0xb7, 0x18, 0x4d, 0x54, 0x46, 0xbb, 0xd4, 0x18,
|
||||
0xb7, 0x28, 0x4d, 0x54, 0x4a, 0xbb, 0xd4, 0x98, 0xb4, 0x38, 0x4d, 0x54, 0x4e, 0xbb, 0xd4, 0x48,
|
||||
0x5a, 0xa4, 0x26, 0x2a, 0xa9, 0x5d, 0x6a, 0x4c, 0x5b, 0xac, 0x26, 0x2a, 0xab, 0x5d, 0x6a, 0xa4,
|
||||
0x2d, 0x5a, 0x13, 0x95, 0xd6, 0x2e, 0x35, 0xb2, 0x16, 0xaf, 0x89, 0xc2, 0xeb, 0xc1, 0x79, 0xfd,
|
||||
0xce, 0x02, 0x45, 0xeb, 0xdf, 0x08, 0xdb, 0x2a, 0xd7, 0x5b, 0xb6, 0x7e, 0xbd, 0x25, 0x8a, 0xed,
|
||||
0x0f, 0x77, 0xb7, 0x10, 0x9e, 0x37, 0x5b, 0x4b, 0xb0, 0x1d, 0xf2, 0x56, 0xd1, 0xbc, 0x83, 0xa7,
|
||||
0x74, 0xd3, 0xfb, 0xc7, 0xff, 0x90, 0x07, 0x7f, 0xee, 0xd3, 0x9d, 0x9b, 0x3f, 0x5a, 0xfc, 0x1d,
|
||||
0xc4, 0xbf, 0x1b, 0xf2, 0x36, 0x0a, 0xf9, 0xe6, 0x5f, 0xc9, 0xf5, 0x81, 0xb7, 0x4a, 0xde, 0x46,
|
||||
0x25, 0x2f, 0xc0, 0x71, 0xca, 0xdb, 0x28, 0xe5, 0x05, 0x38, 0x6e, 0x79, 0x1b, 0xb5, 0xbc, 0x00,
|
||||
0xc7, 0x31, 0x6f, 0xa3, 0x98, 0x17, 0xe0, 0xb8, 0xe6, 0x6d, 0x54, 0xf3, 0x02, 0x1c, 0xe7, 0xbc,
|
||||
0x8d, 0x72, 0x5e, 0x80, 0xe3, 0x9e, 0xb7, 0x51, 0xcf, 0x0b, 0x70, 0x1c, 0xf4, 0x36, 0x0a, 0x7a,
|
||||
0x01, 0x8e, 0x8b, 0xde, 0x46, 0x45, 0x2f, 0xc0, 0x71, 0xd2, 0xdb, 0x28, 0xe9, 0x05, 0x38, 0x6e,
|
||||
0x7a, 0x1b, 0x35, 0xbd, 0x00, 0xc7, 0x51, 0x6f, 0xa3, 0xa8, 0x17, 0xe0, 0xb8, 0xea, 0x1d, 0x5c,
|
||||
0xf5, 0x96, 0xc8, 0x31, 0x9c, 0xf5, 0x0e, 0xce, 0x7a, 0x4b, 0xa4, 0x19, 0xee, 0x7a, 0x07, 0x77,
|
||||
0xbd, 0x25, 0x32, 0x0d, 0x87, 0xbd, 0x83, 0xc3, 0xde, 0x12, 0xc9, 0x86, 0xcb, 0xde, 0xc1, 0x65,
|
||||
0x6f, 0x09, 0x7d, 0x43, 0x69, 0xef, 0xe0, 0xb4, 0xb7, 0x44, 0xca, 0xe1, 0xb6, 0x77, 0x70, 0xdb,
|
||||
0x5b, 0x22, 0xeb, 0x70, 0xdc, 0x3b, 0x38, 0xee, 0x2d, 0x91, 0x78, 0xb8, 0xee, 0x1d, 0x5c, 0xf7,
|
||||
0x96, 0xc8, 0x3d, 0x9c, 0xf7, 0x0e, 0xce, 0x7b, 0x4b, 0xa4, 0x1f, 0xee, 0x7b, 0x07, 0xf7, 0xbd,
|
||||
0x25, 0x32, 0x10, 0x07, 0xbe, 0x83, 0x03, 0xdf, 0x12, 0x49, 0x88, 0x0b, 0xdf, 0xc1, 0x85, 0x6f,
|
||||
0x89, 0x3c, 0xbc, 0x4f, 0xfc, 0xfb, 0xc4, 0xbf, 0x4f, 0xfc, 0xfb, 0xc4, 0xbf, 0x4f, 0xfc, 0xff,
|
||||
0x45, 0xe2, 0xff, 0xac, 0xd1, 0x47, 0x59, 0xbe, 0xe4, 0xad, 0x5a, 0x5e, 0x9a, 0x0e, 0xdd, 0xf0,
|
||||
0x8b, 0x55, 0xce, 0x53, 0xf6, 0xd5, 0x3d, 0xc4, 0x1b, 0x62, 0x08, 0x0f, 0xaf, 0x7f, 0xc9, 0x57,
|
||||
0xe4, 0x41, 0x46, 0x3b, 0x37, 0xdf, 0x6a, 0x39, 0xfb, 0x04, 0x9f, 0x2d, 0xba, 0x0b, 0x8f, 0x9e,
|
||||
0xd1, 0xe7, 0x74, 0x7b, 0x56, 0x2c, 0x8b, 0x9c, 0xdf, 0xc9, 0x2f, 0xcd, 0x6e, 0x95, 0xcc, 0x50,
|
||||
0xfe, 0xa4, 0x6a, 0xe2, 0x6e, 0xd5, 0xc4, 0xf0, 0xfc, 0x3a, 0x55, 0xf4, 0x5a, 0x55, 0xf4, 0x92,
|
||||
0x3e, 0x69, 0xb9, 0x37, 0xaf, 0x07, 0xc1, 0xc9, 0x13, 0x6a, 0xd4, 0x5f, 0x9b, 0x0f, 0xa8, 0xe6,
|
||||
0xf5, 0x5e, 0x83, 0x0f, 0x7e, 0x4f, 0x83, 0x0f, 0x41, 0x4f, 0x3f, 0xfb, 0x55, 0xa7, 0x24, 0xcb,
|
||||
0x97, 0xa6, 0x47, 0x37, 0xe3, 0x62, 0x05, 0x9f, 0xed, 0xb5, 0xdd, 0xbf, 0x3a, 0xd8, 0x6f, 0xfd,
|
||||
0x9b, 0x37, 0xa0, 0x3f, 0xfd, 0xf6, 0xc7, 0x2f, 0xfa, 0x86, 0xa9, 0x9f, 0x7e, 0x64, 0x86, 0x74,
|
||||
0xeb, 0x8b, 0x45, 0x29, 0xb9, 0x46, 0xeb, 0x77, 0x07, 0xdb, 0xd5, 0x25, 0xb6, 0x06, 0xfa, 0xe9,
|
||||
0xd9, 0xb9, 0x76, 0x62, 0x26, 0xb4, 0x13, 0x17, 0xab, 0xf5, 0x4b, 0x64, 0xde, 0x7a, 0x37, 0x81,
|
||||
0x2f, 0xc5, 0xee, 0x3e, 0xd0, 0xf2, 0x8c, 0x32, 0x4a, 0xe1, 0x19, 0xa9, 0x2e, 0x26, 0x7a, 0xa0,
|
||||
0xf1, 0xd4, 0xbe, 0xda, 0xac, 0xfe, 0xcf, 0xe9, 0xe3, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x05,
|
||||
0x3c, 0xbf, 0x46, 0xa4, 0x1a, 0x00, 0x00,
|
||||
}
|
||||
|
|
|
@ -146,3 +146,9 @@ message MapNestedMsg {
|
|||
map<int64, NestedMessageA> Beta = 2;
|
||||
}
|
||||
|
||||
message RepeatedTypes {
|
||||
repeated int64 AA = 1;
|
||||
repeated string BB = 2;
|
||||
repeated EnumType CC = 3;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче