Source File
build.go
Belonging Package
google.golang.org/protobuf/internal/filetype
GoTypes []interface{}
TypeRegistry interface {
RegisterMessage(pref.MessageType) error
RegisterEnum(pref.EnumType) error
RegisterExtension(pref.ExtensionType) error
}
}
type Out struct {
File pref.FileDescriptor
}
if .File.FileRegistry == nil {
.File.FileRegistry = preg.GlobalFiles
}
.File.FileRegistry = &resolverByIndex{
goTypes: .GoTypes,
depIdxs: .DependencyIndexes,
fileRegistry: .File.FileRegistry,
}
if .TypeRegistry == nil {
.TypeRegistry = preg.GlobalTypes
}
:= .File.Build()
.File = .File
if := .TypeRegistry.RegisterEnum(&.EnumInfos[]); != nil {
panic()
}
}
}
:= .GoTypes[len(.Enums):][:len(.Messages)]
if len(.MessageInfos) != len(.Messages) {
panic("mismatching message lengths")
}
if len(.Messages) > 0 {
for := range .Messages {
if [] == nil {
continue // skip map entry
}
.MessageInfos[].GoReflectType = reflect.TypeOf([])
.MessageInfos[].Desc = &.Messages[]
if := .TypeRegistry.RegisterMessage(&.MessageInfos[]); != nil {
panic()
}
}
if .File.Path() == "google/protobuf/descriptor.proto" && .File.Package() == "google.protobuf" {
for := range .Messages {
switch .Messages[].Name() {
case "FileOptions":
descopts.File = [].(pref.ProtoMessage)
case "EnumOptions":
descopts.Enum = [].(pref.ProtoMessage)
case "EnumValueOptions":
descopts.EnumValue = [].(pref.ProtoMessage)
case "MessageOptions":
descopts.Message = [].(pref.ProtoMessage)
case "FieldOptions":
descopts.Field = [].(pref.ProtoMessage)
case "OneofOptions":
descopts.Oneof = [].(pref.ProtoMessage)
case "ExtensionRangeOptions":
descopts.ExtensionRange = [].(pref.ProtoMessage)
case "ServiceOptions":
descopts.Service = [].(pref.ProtoMessage)
case "MethodOptions":
descopts.Method = [].(pref.ProtoMessage)
}
}
}
}
if len(.ExtensionInfos) != len(.Extensions) {
panic("mismatching extension lengths")
}
var int32
const = 2
var reflect.Type
switch .Extensions[].L1.Kind {
case pref.EnumKind:
:= depIdxs.Get(.DependencyIndexes, , )
= reflect.TypeOf(.GoTypes[])
++
case pref.MessageKind, pref.GroupKind:
:= depIdxs.Get(.DependencyIndexes, , )
= reflect.TypeOf(.GoTypes[])
++
default:
= goTypeForPBKind[.Extensions[].L1.Kind]
}
if .Extensions[].IsList() {
= reflect.SliceOf()
}
pimpl.InitExtensionInfo(&.ExtensionInfos[], &.Extensions[], )
if := .TypeRegistry.RegisterExtension(&.ExtensionInfos[]); != nil {
panic()
}
}
return
}
var goTypeForPBKind = map[pref.Kind]reflect.Type{
pref.BoolKind: reflect.TypeOf(bool(false)),
pref.Int32Kind: reflect.TypeOf(int32(0)),
pref.Sint32Kind: reflect.TypeOf(int32(0)),
pref.Sfixed32Kind: reflect.TypeOf(int32(0)),
pref.Int64Kind: reflect.TypeOf(int64(0)),
pref.Sint64Kind: reflect.TypeOf(int64(0)),
pref.Sfixed64Kind: reflect.TypeOf(int64(0)),
pref.Uint32Kind: reflect.TypeOf(uint32(0)),
pref.Fixed32Kind: reflect.TypeOf(uint32(0)),
pref.Uint64Kind: reflect.TypeOf(uint64(0)),
pref.Fixed64Kind: reflect.TypeOf(uint64(0)),
pref.FloatKind: reflect.TypeOf(float32(0)),
pref.DoubleKind: reflect.TypeOf(float64(0)),
pref.StringKind: reflect.TypeOf(string("")),
pref.BytesKind: reflect.TypeOf([]byte(nil)),
}
type depIdxs []int32
func ( depIdxs) (, int32) int32 {
return [[int32(len())--1]+]
}
type (
resolverByIndex struct {
goTypes []interface{}
depIdxs depIdxs
fileRegistry
}
fileRegistry interface {
FindFileByPath(string) (pref.FileDescriptor, error)
FindDescriptorByName(pref.FullName) (pref.Descriptor, error)
RegisterFile(pref.FileDescriptor) error
}
)
func ( *resolverByIndex) (, int32, []fdesc.Enum, []fdesc.Message) pref.EnumDescriptor {
if := int(.depIdxs.Get(, )); int() < len()+len() {
return &[]
} else {
return pimpl.Export{}.EnumDescriptorOf(.goTypes[])
}
}
func ( *resolverByIndex) (, int32, []fdesc.Enum, []fdesc.Message) pref.MessageDescriptor {
if := int(.depIdxs.Get(, )); < len()+len() {
return &[-len()]
} else {
return pimpl.Export{}.MessageDescriptorOf(.goTypes[])
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |