mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
Enable to run build and invoke in background
Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
This commit is contained in:
168
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go
generated
vendored
Normal file
168
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go
generated
vendored
Normal file
@ -0,0 +1,168 @@
|
||||
// Copyright 2019 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package internal_gengo
|
||||
|
||||
import (
|
||||
"unicode"
|
||||
"unicode/utf8"
|
||||
|
||||
"google.golang.org/protobuf/compiler/protogen"
|
||||
"google.golang.org/protobuf/encoding/protowire"
|
||||
|
||||
"google.golang.org/protobuf/types/descriptorpb"
|
||||
)
|
||||
|
||||
type fileInfo struct {
|
||||
*protogen.File
|
||||
|
||||
allEnums []*enumInfo
|
||||
allMessages []*messageInfo
|
||||
allExtensions []*extensionInfo
|
||||
|
||||
allEnumsByPtr map[*enumInfo]int // value is index into allEnums
|
||||
allMessagesByPtr map[*messageInfo]int // value is index into allMessages
|
||||
allMessageFieldsByPtr map[*messageInfo]*structFields
|
||||
|
||||
// needRawDesc specifies whether the generator should emit logic to provide
|
||||
// the legacy raw descriptor in GZIP'd form.
|
||||
// This is updated by enum and message generation logic as necessary,
|
||||
// and checked at the end of file generation.
|
||||
needRawDesc bool
|
||||
}
|
||||
|
||||
type structFields struct {
|
||||
count int
|
||||
unexported map[int]string
|
||||
}
|
||||
|
||||
func (sf *structFields) append(name string) {
|
||||
if r, _ := utf8.DecodeRuneInString(name); !unicode.IsUpper(r) {
|
||||
if sf.unexported == nil {
|
||||
sf.unexported = make(map[int]string)
|
||||
}
|
||||
sf.unexported[sf.count] = name
|
||||
}
|
||||
sf.count++
|
||||
}
|
||||
|
||||
func newFileInfo(file *protogen.File) *fileInfo {
|
||||
f := &fileInfo{File: file}
|
||||
|
||||
// Collect all enums, messages, and extensions in "flattened ordering".
|
||||
// See filetype.TypeBuilder.
|
||||
var walkMessages func([]*protogen.Message, func(*protogen.Message))
|
||||
walkMessages = func(messages []*protogen.Message, f func(*protogen.Message)) {
|
||||
for _, m := range messages {
|
||||
f(m)
|
||||
walkMessages(m.Messages, f)
|
||||
}
|
||||
}
|
||||
initEnumInfos := func(enums []*protogen.Enum) {
|
||||
for _, enum := range enums {
|
||||
f.allEnums = append(f.allEnums, newEnumInfo(f, enum))
|
||||
}
|
||||
}
|
||||
initMessageInfos := func(messages []*protogen.Message) {
|
||||
for _, message := range messages {
|
||||
f.allMessages = append(f.allMessages, newMessageInfo(f, message))
|
||||
}
|
||||
}
|
||||
initExtensionInfos := func(extensions []*protogen.Extension) {
|
||||
for _, extension := range extensions {
|
||||
f.allExtensions = append(f.allExtensions, newExtensionInfo(f, extension))
|
||||
}
|
||||
}
|
||||
initEnumInfos(f.Enums)
|
||||
initMessageInfos(f.Messages)
|
||||
initExtensionInfos(f.Extensions)
|
||||
walkMessages(f.Messages, func(m *protogen.Message) {
|
||||
initEnumInfos(m.Enums)
|
||||
initMessageInfos(m.Messages)
|
||||
initExtensionInfos(m.Extensions)
|
||||
})
|
||||
|
||||
// Derive a reverse mapping of enum and message pointers to their index
|
||||
// in allEnums and allMessages.
|
||||
if len(f.allEnums) > 0 {
|
||||
f.allEnumsByPtr = make(map[*enumInfo]int)
|
||||
for i, e := range f.allEnums {
|
||||
f.allEnumsByPtr[e] = i
|
||||
}
|
||||
}
|
||||
if len(f.allMessages) > 0 {
|
||||
f.allMessagesByPtr = make(map[*messageInfo]int)
|
||||
f.allMessageFieldsByPtr = make(map[*messageInfo]*structFields)
|
||||
for i, m := range f.allMessages {
|
||||
f.allMessagesByPtr[m] = i
|
||||
f.allMessageFieldsByPtr[m] = new(structFields)
|
||||
}
|
||||
}
|
||||
|
||||
return f
|
||||
}
|
||||
|
||||
type enumInfo struct {
|
||||
*protogen.Enum
|
||||
|
||||
genJSONMethod bool
|
||||
genRawDescMethod bool
|
||||
}
|
||||
|
||||
func newEnumInfo(f *fileInfo, enum *protogen.Enum) *enumInfo {
|
||||
e := &enumInfo{Enum: enum}
|
||||
e.genJSONMethod = true
|
||||
e.genRawDescMethod = true
|
||||
return e
|
||||
}
|
||||
|
||||
type messageInfo struct {
|
||||
*protogen.Message
|
||||
|
||||
genRawDescMethod bool
|
||||
genExtRangeMethod bool
|
||||
|
||||
isTracked bool
|
||||
hasWeak bool
|
||||
}
|
||||
|
||||
func newMessageInfo(f *fileInfo, message *protogen.Message) *messageInfo {
|
||||
m := &messageInfo{Message: message}
|
||||
m.genRawDescMethod = true
|
||||
m.genExtRangeMethod = true
|
||||
m.isTracked = isTrackedMessage(m)
|
||||
for _, field := range m.Fields {
|
||||
m.hasWeak = m.hasWeak || field.Desc.IsWeak()
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// isTrackedMessage reports whether field tracking is enabled on the message.
|
||||
func isTrackedMessage(m *messageInfo) (tracked bool) {
|
||||
const trackFieldUse_fieldNumber = 37383685
|
||||
|
||||
// Decode the option from unknown fields to avoid a dependency on the
|
||||
// annotation proto from protoc-gen-go.
|
||||
b := m.Desc.Options().(*descriptorpb.MessageOptions).ProtoReflect().GetUnknown()
|
||||
for len(b) > 0 {
|
||||
num, typ, n := protowire.ConsumeTag(b)
|
||||
b = b[n:]
|
||||
if num == trackFieldUse_fieldNumber && typ == protowire.VarintType {
|
||||
v, _ := protowire.ConsumeVarint(b)
|
||||
tracked = protowire.DecodeBool(v)
|
||||
}
|
||||
m := protowire.ConsumeFieldValue(num, typ, b)
|
||||
b = b[m:]
|
||||
}
|
||||
return tracked
|
||||
}
|
||||
|
||||
type extensionInfo struct {
|
||||
*protogen.Extension
|
||||
}
|
||||
|
||||
func newExtensionInfo(f *fileInfo, extension *protogen.Extension) *extensionInfo {
|
||||
x := &extensionInfo{Extension: extension}
|
||||
return x
|
||||
}
|
884
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go
generated
vendored
Normal file
884
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go
generated
vendored
Normal file
@ -0,0 +1,884 @@
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Package internal_gengo is internal to the protobuf module.
|
||||
package internal_gengo
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode"
|
||||
"unicode/utf8"
|
||||
|
||||
"google.golang.org/protobuf/compiler/protogen"
|
||||
"google.golang.org/protobuf/internal/encoding/tag"
|
||||
"google.golang.org/protobuf/internal/genid"
|
||||
"google.golang.org/protobuf/internal/version"
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
"google.golang.org/protobuf/runtime/protoimpl"
|
||||
|
||||
"google.golang.org/protobuf/types/descriptorpb"
|
||||
"google.golang.org/protobuf/types/pluginpb"
|
||||
)
|
||||
|
||||
// SupportedFeatures reports the set of supported protobuf language features.
|
||||
var SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)
|
||||
|
||||
// GenerateVersionMarkers specifies whether to generate version markers.
|
||||
var GenerateVersionMarkers = true
|
||||
|
||||
// Standard library dependencies.
|
||||
const (
|
||||
base64Package = protogen.GoImportPath("encoding/base64")
|
||||
mathPackage = protogen.GoImportPath("math")
|
||||
reflectPackage = protogen.GoImportPath("reflect")
|
||||
sortPackage = protogen.GoImportPath("sort")
|
||||
stringsPackage = protogen.GoImportPath("strings")
|
||||
syncPackage = protogen.GoImportPath("sync")
|
||||
timePackage = protogen.GoImportPath("time")
|
||||
utf8Package = protogen.GoImportPath("unicode/utf8")
|
||||
)
|
||||
|
||||
// Protobuf library dependencies.
|
||||
//
|
||||
// These are declared as an interface type so that they can be more easily
|
||||
// patched to support unique build environments that impose restrictions
|
||||
// on the dependencies of generated source code.
|
||||
var (
|
||||
protoPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/proto")
|
||||
protoifacePackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoiface")
|
||||
protoimplPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoimpl")
|
||||
protojsonPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/encoding/protojson")
|
||||
protoreflectPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoreflect")
|
||||
protoregistryPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoregistry")
|
||||
)
|
||||
|
||||
type goImportPath interface {
|
||||
String() string
|
||||
Ident(string) protogen.GoIdent
|
||||
}
|
||||
|
||||
// GenerateFile generates the contents of a .pb.go file.
|
||||
func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile {
|
||||
filename := file.GeneratedFilenamePrefix + ".pb.go"
|
||||
g := gen.NewGeneratedFile(filename, file.GoImportPath)
|
||||
f := newFileInfo(file)
|
||||
|
||||
genStandaloneComments(g, f, int32(genid.FileDescriptorProto_Syntax_field_number))
|
||||
genGeneratedHeader(gen, g, f)
|
||||
genStandaloneComments(g, f, int32(genid.FileDescriptorProto_Package_field_number))
|
||||
|
||||
packageDoc := genPackageKnownComment(f)
|
||||
g.P(packageDoc, "package ", f.GoPackageName)
|
||||
g.P()
|
||||
|
||||
// Emit a static check that enforces a minimum version of the proto package.
|
||||
if GenerateVersionMarkers {
|
||||
g.P("const (")
|
||||
g.P("// Verify that this generated code is sufficiently up-to-date.")
|
||||
g.P("_ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimpl.GenVersion, " - ", protoimplPackage.Ident("MinVersion"), ")")
|
||||
g.P("// Verify that runtime/protoimpl is sufficiently up-to-date.")
|
||||
g.P("_ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimplPackage.Ident("MaxVersion"), " - ", protoimpl.GenVersion, ")")
|
||||
g.P(")")
|
||||
g.P()
|
||||
}
|
||||
|
||||
for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ {
|
||||
genImport(gen, g, f, imps.Get(i))
|
||||
}
|
||||
for _, enum := range f.allEnums {
|
||||
genEnum(g, f, enum)
|
||||
}
|
||||
for _, message := range f.allMessages {
|
||||
genMessage(g, f, message)
|
||||
}
|
||||
genExtensions(g, f)
|
||||
|
||||
genReflectFileDescriptor(gen, g, f)
|
||||
|
||||
return g
|
||||
}
|
||||
|
||||
// genStandaloneComments prints all leading comments for a FileDescriptorProto
|
||||
// location identified by the field number n.
|
||||
func genStandaloneComments(g *protogen.GeneratedFile, f *fileInfo, n int32) {
|
||||
loc := f.Desc.SourceLocations().ByPath(protoreflect.SourcePath{n})
|
||||
for _, s := range loc.LeadingDetachedComments {
|
||||
g.P(protogen.Comments(s))
|
||||
g.P()
|
||||
}
|
||||
if s := loc.LeadingComments; s != "" {
|
||||
g.P(protogen.Comments(s))
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
func genGeneratedHeader(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
|
||||
g.P("// Code generated by protoc-gen-go. DO NOT EDIT.")
|
||||
|
||||
if GenerateVersionMarkers {
|
||||
g.P("// versions:")
|
||||
protocGenGoVersion := version.String()
|
||||
protocVersion := "(unknown)"
|
||||
if v := gen.Request.GetCompilerVersion(); v != nil {
|
||||
protocVersion = fmt.Sprintf("v%v.%v.%v", v.GetMajor(), v.GetMinor(), v.GetPatch())
|
||||
if s := v.GetSuffix(); s != "" {
|
||||
protocVersion += "-" + s
|
||||
}
|
||||
}
|
||||
g.P("// \tprotoc-gen-go ", protocGenGoVersion)
|
||||
g.P("// \tprotoc ", protocVersion)
|
||||
}
|
||||
|
||||
if f.Proto.GetOptions().GetDeprecated() {
|
||||
g.P("// ", f.Desc.Path(), " is a deprecated file.")
|
||||
} else {
|
||||
g.P("// source: ", f.Desc.Path())
|
||||
}
|
||||
g.P()
|
||||
}
|
||||
|
||||
func genImport(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, imp protoreflect.FileImport) {
|
||||
impFile, ok := gen.FilesByPath[imp.Path()]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if impFile.GoImportPath == f.GoImportPath {
|
||||
// Don't generate imports or aliases for types in the same Go package.
|
||||
return
|
||||
}
|
||||
// Generate imports for all non-weak dependencies, even if they are not
|
||||
// referenced, because other code and tools depend on having the
|
||||
// full transitive closure of protocol buffer types in the binary.
|
||||
if !imp.IsWeak {
|
||||
g.Import(impFile.GoImportPath)
|
||||
}
|
||||
if !imp.IsPublic {
|
||||
return
|
||||
}
|
||||
|
||||
// Generate public imports by generating the imported file, parsing it,
|
||||
// and extracting every symbol that should receive a forwarding declaration.
|
||||
impGen := GenerateFile(gen, impFile)
|
||||
impGen.Skip()
|
||||
b, err := impGen.Content()
|
||||
if err != nil {
|
||||
gen.Error(err)
|
||||
return
|
||||
}
|
||||
fset := token.NewFileSet()
|
||||
astFile, err := parser.ParseFile(fset, "", b, parser.ParseComments)
|
||||
if err != nil {
|
||||
gen.Error(err)
|
||||
return
|
||||
}
|
||||
genForward := func(tok token.Token, name string, expr ast.Expr) {
|
||||
// Don't import unexported symbols.
|
||||
r, _ := utf8.DecodeRuneInString(name)
|
||||
if !unicode.IsUpper(r) {
|
||||
return
|
||||
}
|
||||
// Don't import the FileDescriptor.
|
||||
if name == impFile.GoDescriptorIdent.GoName {
|
||||
return
|
||||
}
|
||||
// Don't import decls referencing a symbol defined in another package.
|
||||
// i.e., don't import decls which are themselves public imports:
|
||||
//
|
||||
// type T = somepackage.T
|
||||
if _, ok := expr.(*ast.SelectorExpr); ok {
|
||||
return
|
||||
}
|
||||
g.P(tok, " ", name, " = ", impFile.GoImportPath.Ident(name))
|
||||
}
|
||||
g.P("// Symbols defined in public import of ", imp.Path(), ".")
|
||||
g.P()
|
||||
for _, decl := range astFile.Decls {
|
||||
switch decl := decl.(type) {
|
||||
case *ast.GenDecl:
|
||||
for _, spec := range decl.Specs {
|
||||
switch spec := spec.(type) {
|
||||
case *ast.TypeSpec:
|
||||
genForward(decl.Tok, spec.Name.Name, spec.Type)
|
||||
case *ast.ValueSpec:
|
||||
for i, name := range spec.Names {
|
||||
var expr ast.Expr
|
||||
if i < len(spec.Values) {
|
||||
expr = spec.Values[i]
|
||||
}
|
||||
genForward(decl.Tok, name.Name, expr)
|
||||
}
|
||||
case *ast.ImportSpec:
|
||||
default:
|
||||
panic(fmt.Sprintf("can't generate forward for spec type %T", spec))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
g.P()
|
||||
}
|
||||
|
||||
func genEnum(g *protogen.GeneratedFile, f *fileInfo, e *enumInfo) {
|
||||
// Enum type declaration.
|
||||
g.Annotate(e.GoIdent.GoName, e.Location)
|
||||
leadingComments := appendDeprecationSuffix(e.Comments.Leading,
|
||||
e.Desc.Options().(*descriptorpb.EnumOptions).GetDeprecated())
|
||||
g.P(leadingComments,
|
||||
"type ", e.GoIdent, " int32")
|
||||
|
||||
// Enum value constants.
|
||||
g.P("const (")
|
||||
for _, value := range e.Values {
|
||||
g.Annotate(value.GoIdent.GoName, value.Location)
|
||||
leadingComments := appendDeprecationSuffix(value.Comments.Leading,
|
||||
value.Desc.Options().(*descriptorpb.EnumValueOptions).GetDeprecated())
|
||||
g.P(leadingComments,
|
||||
value.GoIdent, " ", e.GoIdent, " = ", value.Desc.Number(),
|
||||
trailingComment(value.Comments.Trailing))
|
||||
}
|
||||
g.P(")")
|
||||
g.P()
|
||||
|
||||
// Enum value maps.
|
||||
g.P("// Enum value maps for ", e.GoIdent, ".")
|
||||
g.P("var (")
|
||||
g.P(e.GoIdent.GoName+"_name", " = map[int32]string{")
|
||||
for _, value := range e.Values {
|
||||
duplicate := ""
|
||||
if value.Desc != e.Desc.Values().ByNumber(value.Desc.Number()) {
|
||||
duplicate = "// Duplicate value: "
|
||||
}
|
||||
g.P(duplicate, value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",")
|
||||
}
|
||||
g.P("}")
|
||||
g.P(e.GoIdent.GoName+"_value", " = map[string]int32{")
|
||||
for _, value := range e.Values {
|
||||
g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",")
|
||||
}
|
||||
g.P("}")
|
||||
g.P(")")
|
||||
g.P()
|
||||
|
||||
// Enum method.
|
||||
//
|
||||
// NOTE: A pointer value is needed to represent presence in proto2.
|
||||
// Since a proto2 message can reference a proto3 enum, it is useful to
|
||||
// always generate this method (even on proto3 enums) to support that case.
|
||||
g.P("func (x ", e.GoIdent, ") Enum() *", e.GoIdent, " {")
|
||||
g.P("p := new(", e.GoIdent, ")")
|
||||
g.P("*p = x")
|
||||
g.P("return p")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// String method.
|
||||
g.P("func (x ", e.GoIdent, ") String() string {")
|
||||
g.P("return ", protoimplPackage.Ident("X"), ".EnumStringOf(x.Descriptor(), ", protoreflectPackage.Ident("EnumNumber"), "(x))")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
genEnumReflectMethods(g, f, e)
|
||||
|
||||
// UnmarshalJSON method.
|
||||
if e.genJSONMethod && e.Desc.Syntax() == protoreflect.Proto2 {
|
||||
g.P("// Deprecated: Do not use.")
|
||||
g.P("func (x *", e.GoIdent, ") UnmarshalJSON(b []byte) error {")
|
||||
g.P("num, err := ", protoimplPackage.Ident("X"), ".UnmarshalJSONEnum(x.Descriptor(), b)")
|
||||
g.P("if err != nil {")
|
||||
g.P("return err")
|
||||
g.P("}")
|
||||
g.P("*x = ", e.GoIdent, "(num)")
|
||||
g.P("return nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
|
||||
// EnumDescriptor method.
|
||||
if e.genRawDescMethod {
|
||||
var indexes []string
|
||||
for i := 1; i < len(e.Location.Path); i += 2 {
|
||||
indexes = append(indexes, strconv.Itoa(int(e.Location.Path[i])))
|
||||
}
|
||||
g.P("// Deprecated: Use ", e.GoIdent, ".Descriptor instead.")
|
||||
g.P("func (", e.GoIdent, ") EnumDescriptor() ([]byte, []int) {")
|
||||
g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
|
||||
g.P("}")
|
||||
g.P()
|
||||
f.needRawDesc = true
|
||||
}
|
||||
}
|
||||
|
||||
func genMessage(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
if m.Desc.IsMapEntry() {
|
||||
return
|
||||
}
|
||||
|
||||
// Message type declaration.
|
||||
g.Annotate(m.GoIdent.GoName, m.Location)
|
||||
leadingComments := appendDeprecationSuffix(m.Comments.Leading,
|
||||
m.Desc.Options().(*descriptorpb.MessageOptions).GetDeprecated())
|
||||
g.P(leadingComments,
|
||||
"type ", m.GoIdent, " struct {")
|
||||
genMessageFields(g, f, m)
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
genMessageKnownFunctions(g, f, m)
|
||||
genMessageDefaultDecls(g, f, m)
|
||||
genMessageMethods(g, f, m)
|
||||
genMessageOneofWrapperTypes(g, f, m)
|
||||
}
|
||||
|
||||
func genMessageFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
sf := f.allMessageFieldsByPtr[m]
|
||||
genMessageInternalFields(g, f, m, sf)
|
||||
for _, field := range m.Fields {
|
||||
genMessageField(g, f, m, field, sf)
|
||||
}
|
||||
}
|
||||
|
||||
func genMessageInternalFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, sf *structFields) {
|
||||
g.P(genid.State_goname, " ", protoimplPackage.Ident("MessageState"))
|
||||
sf.append(genid.State_goname)
|
||||
g.P(genid.SizeCache_goname, " ", protoimplPackage.Ident("SizeCache"))
|
||||
sf.append(genid.SizeCache_goname)
|
||||
if m.hasWeak {
|
||||
g.P(genid.WeakFields_goname, " ", protoimplPackage.Ident("WeakFields"))
|
||||
sf.append(genid.WeakFields_goname)
|
||||
}
|
||||
g.P(genid.UnknownFields_goname, " ", protoimplPackage.Ident("UnknownFields"))
|
||||
sf.append(genid.UnknownFields_goname)
|
||||
if m.Desc.ExtensionRanges().Len() > 0 {
|
||||
g.P(genid.ExtensionFields_goname, " ", protoimplPackage.Ident("ExtensionFields"))
|
||||
sf.append(genid.ExtensionFields_goname)
|
||||
}
|
||||
if sf.count > 0 {
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
func genMessageField(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, field *protogen.Field, sf *structFields) {
|
||||
if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() {
|
||||
// It would be a bit simpler to iterate over the oneofs below,
|
||||
// but generating the field here keeps the contents of the Go
|
||||
// struct in the same order as the contents of the source
|
||||
// .proto file.
|
||||
if oneof.Fields[0] != field {
|
||||
return // only generate for first appearance
|
||||
}
|
||||
|
||||
tags := structTags{
|
||||
{"protobuf_oneof", string(oneof.Desc.Name())},
|
||||
}
|
||||
if m.isTracked {
|
||||
tags = append(tags, gotrackTags...)
|
||||
}
|
||||
|
||||
g.Annotate(m.GoIdent.GoName+"."+oneof.GoName, oneof.Location)
|
||||
leadingComments := oneof.Comments.Leading
|
||||
if leadingComments != "" {
|
||||
leadingComments += "\n"
|
||||
}
|
||||
ss := []string{fmt.Sprintf(" Types that are assignable to %s:\n", oneof.GoName)}
|
||||
for _, field := range oneof.Fields {
|
||||
ss = append(ss, "\t*"+field.GoIdent.GoName+"\n")
|
||||
}
|
||||
leadingComments += protogen.Comments(strings.Join(ss, ""))
|
||||
g.P(leadingComments,
|
||||
oneof.GoName, " ", oneofInterfaceName(oneof), tags)
|
||||
sf.append(oneof.GoName)
|
||||
return
|
||||
}
|
||||
goType, pointer := fieldGoType(g, f, field)
|
||||
if pointer {
|
||||
goType = "*" + goType
|
||||
}
|
||||
tags := structTags{
|
||||
{"protobuf", fieldProtobufTagValue(field)},
|
||||
{"json", fieldJSONTagValue(field)},
|
||||
}
|
||||
if field.Desc.IsMap() {
|
||||
key := field.Message.Fields[0]
|
||||
val := field.Message.Fields[1]
|
||||
tags = append(tags, structTags{
|
||||
{"protobuf_key", fieldProtobufTagValue(key)},
|
||||
{"protobuf_val", fieldProtobufTagValue(val)},
|
||||
}...)
|
||||
}
|
||||
if m.isTracked {
|
||||
tags = append(tags, gotrackTags...)
|
||||
}
|
||||
|
||||
name := field.GoName
|
||||
if field.Desc.IsWeak() {
|
||||
name = genid.WeakFieldPrefix_goname + name
|
||||
}
|
||||
g.Annotate(m.GoIdent.GoName+"."+name, field.Location)
|
||||
leadingComments := appendDeprecationSuffix(field.Comments.Leading,
|
||||
field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
|
||||
g.P(leadingComments,
|
||||
name, " ", goType, tags,
|
||||
trailingComment(field.Comments.Trailing))
|
||||
sf.append(field.GoName)
|
||||
}
|
||||
|
||||
// genMessageDefaultDecls generates consts and vars holding the default
|
||||
// values of fields.
|
||||
func genMessageDefaultDecls(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
var consts, vars []string
|
||||
for _, field := range m.Fields {
|
||||
if !field.Desc.HasDefault() {
|
||||
continue
|
||||
}
|
||||
name := "Default_" + m.GoIdent.GoName + "_" + field.GoName
|
||||
goType, _ := fieldGoType(g, f, field)
|
||||
defVal := field.Desc.Default()
|
||||
switch field.Desc.Kind() {
|
||||
case protoreflect.StringKind:
|
||||
consts = append(consts, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.String()))
|
||||
case protoreflect.BytesKind:
|
||||
vars = append(vars, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.Bytes()))
|
||||
case protoreflect.EnumKind:
|
||||
idx := field.Desc.DefaultEnumValue().Index()
|
||||
val := field.Enum.Values[idx]
|
||||
if val.GoIdent.GoImportPath == f.GoImportPath {
|
||||
consts = append(consts, fmt.Sprintf("%s = %s", name, g.QualifiedGoIdent(val.GoIdent)))
|
||||
} else {
|
||||
// If the enum value is declared in a different Go package,
|
||||
// reference it by number since the name may not be correct.
|
||||
// See https://github.com/golang/protobuf/issues/513.
|
||||
consts = append(consts, fmt.Sprintf("%s = %s(%d) // %s",
|
||||
name, g.QualifiedGoIdent(field.Enum.GoIdent), val.Desc.Number(), g.QualifiedGoIdent(val.GoIdent)))
|
||||
}
|
||||
case protoreflect.FloatKind, protoreflect.DoubleKind:
|
||||
if f := defVal.Float(); math.IsNaN(f) || math.IsInf(f, 0) {
|
||||
var fn, arg string
|
||||
switch f := defVal.Float(); {
|
||||
case math.IsInf(f, -1):
|
||||
fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "-1"
|
||||
case math.IsInf(f, +1):
|
||||
fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "+1"
|
||||
case math.IsNaN(f):
|
||||
fn, arg = g.QualifiedGoIdent(mathPackage.Ident("NaN")), ""
|
||||
}
|
||||
vars = append(vars, fmt.Sprintf("%s = %s(%s(%s))", name, goType, fn, arg))
|
||||
} else {
|
||||
consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, f))
|
||||
}
|
||||
default:
|
||||
consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, defVal.Interface()))
|
||||
}
|
||||
}
|
||||
if len(consts) > 0 {
|
||||
g.P("// Default values for ", m.GoIdent, " fields.")
|
||||
g.P("const (")
|
||||
for _, s := range consts {
|
||||
g.P(s)
|
||||
}
|
||||
g.P(")")
|
||||
}
|
||||
if len(vars) > 0 {
|
||||
g.P("// Default values for ", m.GoIdent, " fields.")
|
||||
g.P("var (")
|
||||
for _, s := range vars {
|
||||
g.P(s)
|
||||
}
|
||||
g.P(")")
|
||||
}
|
||||
g.P()
|
||||
}
|
||||
|
||||
func genMessageMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
genMessageBaseMethods(g, f, m)
|
||||
genMessageGetterMethods(g, f, m)
|
||||
genMessageSetterMethods(g, f, m)
|
||||
}
|
||||
|
||||
func genMessageBaseMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
// Reset method.
|
||||
g.P("func (x *", m.GoIdent, ") Reset() {")
|
||||
g.P("*x = ", m.GoIdent, "{}")
|
||||
g.P("if ", protoimplPackage.Ident("UnsafeEnabled"), " {")
|
||||
g.P("mi := &", messageTypesVarName(f), "[", f.allMessagesByPtr[m], "]")
|
||||
g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))")
|
||||
g.P("ms.StoreMessageInfo(mi)")
|
||||
g.P("}")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// String method.
|
||||
g.P("func (x *", m.GoIdent, ") String() string {")
|
||||
g.P("return ", protoimplPackage.Ident("X"), ".MessageStringOf(x)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// ProtoMessage method.
|
||||
g.P("func (*", m.GoIdent, ") ProtoMessage() {}")
|
||||
g.P()
|
||||
|
||||
// ProtoReflect method.
|
||||
genMessageReflectMethods(g, f, m)
|
||||
|
||||
// Descriptor method.
|
||||
if m.genRawDescMethod {
|
||||
var indexes []string
|
||||
for i := 1; i < len(m.Location.Path); i += 2 {
|
||||
indexes = append(indexes, strconv.Itoa(int(m.Location.Path[i])))
|
||||
}
|
||||
g.P("// Deprecated: Use ", m.GoIdent, ".ProtoReflect.Descriptor instead.")
|
||||
g.P("func (*", m.GoIdent, ") Descriptor() ([]byte, []int) {")
|
||||
g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
|
||||
g.P("}")
|
||||
g.P()
|
||||
f.needRawDesc = true
|
||||
}
|
||||
}
|
||||
|
||||
func genMessageGetterMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
for _, field := range m.Fields {
|
||||
genNoInterfacePragma(g, m.isTracked)
|
||||
|
||||
// Getter for parent oneof.
|
||||
if oneof := field.Oneof; oneof != nil && oneof.Fields[0] == field && !oneof.Desc.IsSynthetic() {
|
||||
g.Annotate(m.GoIdent.GoName+".Get"+oneof.GoName, oneof.Location)
|
||||
g.P("func (m *", m.GoIdent.GoName, ") Get", oneof.GoName, "() ", oneofInterfaceName(oneof), " {")
|
||||
g.P("if m != nil {")
|
||||
g.P("return m.", oneof.GoName)
|
||||
g.P("}")
|
||||
g.P("return nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
|
||||
// Getter for message field.
|
||||
goType, pointer := fieldGoType(g, f, field)
|
||||
defaultValue := fieldDefaultValue(g, f, m, field)
|
||||
g.Annotate(m.GoIdent.GoName+".Get"+field.GoName, field.Location)
|
||||
leadingComments := appendDeprecationSuffix("",
|
||||
field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
|
||||
switch {
|
||||
case field.Desc.IsWeak():
|
||||
g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", protoPackage.Ident("Message"), "{")
|
||||
g.P("var w ", protoimplPackage.Ident("WeakFields"))
|
||||
g.P("if x != nil {")
|
||||
g.P("w = x.", genid.WeakFields_goname)
|
||||
if m.isTracked {
|
||||
g.P("_ = x.", genid.WeakFieldPrefix_goname+field.GoName)
|
||||
}
|
||||
g.P("}")
|
||||
g.P("return ", protoimplPackage.Ident("X"), ".GetWeak(w, ", field.Desc.Number(), ", ", strconv.Quote(string(field.Message.Desc.FullName())), ")")
|
||||
g.P("}")
|
||||
case field.Oneof != nil && !field.Oneof.Desc.IsSynthetic():
|
||||
g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", goType, " {")
|
||||
g.P("if x, ok := x.Get", field.Oneof.GoName, "().(*", field.GoIdent, "); ok {")
|
||||
g.P("return x.", field.GoName)
|
||||
g.P("}")
|
||||
g.P("return ", defaultValue)
|
||||
g.P("}")
|
||||
default:
|
||||
g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", goType, " {")
|
||||
if !field.Desc.HasPresence() || defaultValue == "nil" {
|
||||
g.P("if x != nil {")
|
||||
} else {
|
||||
g.P("if x != nil && x.", field.GoName, " != nil {")
|
||||
}
|
||||
star := ""
|
||||
if pointer {
|
||||
star = "*"
|
||||
}
|
||||
g.P("return ", star, " x.", field.GoName)
|
||||
g.P("}")
|
||||
g.P("return ", defaultValue)
|
||||
g.P("}")
|
||||
}
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
func genMessageSetterMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
for _, field := range m.Fields {
|
||||
if !field.Desc.IsWeak() {
|
||||
continue
|
||||
}
|
||||
|
||||
genNoInterfacePragma(g, m.isTracked)
|
||||
|
||||
g.Annotate(m.GoIdent.GoName+".Set"+field.GoName, field.Location)
|
||||
leadingComments := appendDeprecationSuffix("",
|
||||
field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
|
||||
g.P(leadingComments, "func (x *", m.GoIdent, ") Set", field.GoName, "(v ", protoPackage.Ident("Message"), ") {")
|
||||
g.P("var w *", protoimplPackage.Ident("WeakFields"))
|
||||
g.P("if x != nil {")
|
||||
g.P("w = &x.", genid.WeakFields_goname)
|
||||
if m.isTracked {
|
||||
g.P("_ = x.", genid.WeakFieldPrefix_goname+field.GoName)
|
||||
}
|
||||
g.P("}")
|
||||
g.P(protoimplPackage.Ident("X"), ".SetWeak(w, ", field.Desc.Number(), ", ", strconv.Quote(string(field.Message.Desc.FullName())), ", v)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
// fieldGoType returns the Go type used for a field.
|
||||
//
|
||||
// If it returns pointer=true, the struct field is a pointer to the type.
|
||||
func fieldGoType(g *protogen.GeneratedFile, f *fileInfo, field *protogen.Field) (goType string, pointer bool) {
|
||||
if field.Desc.IsWeak() {
|
||||
return "struct{}", false
|
||||
}
|
||||
|
||||
pointer = field.Desc.HasPresence()
|
||||
switch field.Desc.Kind() {
|
||||
case protoreflect.BoolKind:
|
||||
goType = "bool"
|
||||
case protoreflect.EnumKind:
|
||||
goType = g.QualifiedGoIdent(field.Enum.GoIdent)
|
||||
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||
goType = "int32"
|
||||
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||
goType = "uint32"
|
||||
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||
goType = "int64"
|
||||
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||
goType = "uint64"
|
||||
case protoreflect.FloatKind:
|
||||
goType = "float32"
|
||||
case protoreflect.DoubleKind:
|
||||
goType = "float64"
|
||||
case protoreflect.StringKind:
|
||||
goType = "string"
|
||||
case protoreflect.BytesKind:
|
||||
goType = "[]byte"
|
||||
pointer = false // rely on nullability of slices for presence
|
||||
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||
goType = "*" + g.QualifiedGoIdent(field.Message.GoIdent)
|
||||
pointer = false // pointer captured as part of the type
|
||||
}
|
||||
switch {
|
||||
case field.Desc.IsList():
|
||||
return "[]" + goType, false
|
||||
case field.Desc.IsMap():
|
||||
keyType, _ := fieldGoType(g, f, field.Message.Fields[0])
|
||||
valType, _ := fieldGoType(g, f, field.Message.Fields[1])
|
||||
return fmt.Sprintf("map[%v]%v", keyType, valType), false
|
||||
}
|
||||
return goType, pointer
|
||||
}
|
||||
|
||||
func fieldProtobufTagValue(field *protogen.Field) string {
|
||||
var enumName string
|
||||
if field.Desc.Kind() == protoreflect.EnumKind {
|
||||
enumName = protoimpl.X.LegacyEnumName(field.Enum.Desc)
|
||||
}
|
||||
return tag.Marshal(field.Desc, enumName)
|
||||
}
|
||||
|
||||
func fieldDefaultValue(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, field *protogen.Field) string {
|
||||
if field.Desc.IsList() {
|
||||
return "nil"
|
||||
}
|
||||
if field.Desc.HasDefault() {
|
||||
defVarName := "Default_" + m.GoIdent.GoName + "_" + field.GoName
|
||||
if field.Desc.Kind() == protoreflect.BytesKind {
|
||||
return "append([]byte(nil), " + defVarName + "...)"
|
||||
}
|
||||
return defVarName
|
||||
}
|
||||
switch field.Desc.Kind() {
|
||||
case protoreflect.BoolKind:
|
||||
return "false"
|
||||
case protoreflect.StringKind:
|
||||
return `""`
|
||||
case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.BytesKind:
|
||||
return "nil"
|
||||
case protoreflect.EnumKind:
|
||||
val := field.Enum.Values[0]
|
||||
if val.GoIdent.GoImportPath == f.GoImportPath {
|
||||
return g.QualifiedGoIdent(val.GoIdent)
|
||||
} else {
|
||||
// If the enum value is declared in a different Go package,
|
||||
// reference it by number since the name may not be correct.
|
||||
// See https://github.com/golang/protobuf/issues/513.
|
||||
return g.QualifiedGoIdent(field.Enum.GoIdent) + "(" + strconv.FormatInt(int64(val.Desc.Number()), 10) + ")"
|
||||
}
|
||||
default:
|
||||
return "0"
|
||||
}
|
||||
}
|
||||
|
||||
func fieldJSONTagValue(field *protogen.Field) string {
|
||||
return string(field.Desc.Name()) + ",omitempty"
|
||||
}
|
||||
|
||||
func genExtensions(g *protogen.GeneratedFile, f *fileInfo) {
|
||||
if len(f.allExtensions) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
g.P("var ", extensionTypesVarName(f), " = []", protoimplPackage.Ident("ExtensionInfo"), "{")
|
||||
for _, x := range f.allExtensions {
|
||||
g.P("{")
|
||||
g.P("ExtendedType: (*", x.Extendee.GoIdent, ")(nil),")
|
||||
goType, pointer := fieldGoType(g, f, x.Extension)
|
||||
if pointer {
|
||||
goType = "*" + goType
|
||||
}
|
||||
g.P("ExtensionType: (", goType, ")(nil),")
|
||||
g.P("Field: ", x.Desc.Number(), ",")
|
||||
g.P("Name: ", strconv.Quote(string(x.Desc.FullName())), ",")
|
||||
g.P("Tag: ", strconv.Quote(fieldProtobufTagValue(x.Extension)), ",")
|
||||
g.P("Filename: ", strconv.Quote(f.Desc.Path()), ",")
|
||||
g.P("},")
|
||||
}
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// Group extensions by the target message.
|
||||
var orderedTargets []protogen.GoIdent
|
||||
allExtensionsByTarget := make(map[protogen.GoIdent][]*extensionInfo)
|
||||
allExtensionsByPtr := make(map[*extensionInfo]int)
|
||||
for i, x := range f.allExtensions {
|
||||
target := x.Extendee.GoIdent
|
||||
if len(allExtensionsByTarget[target]) == 0 {
|
||||
orderedTargets = append(orderedTargets, target)
|
||||
}
|
||||
allExtensionsByTarget[target] = append(allExtensionsByTarget[target], x)
|
||||
allExtensionsByPtr[x] = i
|
||||
}
|
||||
for _, target := range orderedTargets {
|
||||
g.P("// Extension fields to ", target, ".")
|
||||
g.P("var (")
|
||||
for _, x := range allExtensionsByTarget[target] {
|
||||
xd := x.Desc
|
||||
typeName := xd.Kind().String()
|
||||
switch xd.Kind() {
|
||||
case protoreflect.EnumKind:
|
||||
typeName = string(xd.Enum().FullName())
|
||||
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||
typeName = string(xd.Message().FullName())
|
||||
}
|
||||
fieldName := string(xd.Name())
|
||||
|
||||
leadingComments := x.Comments.Leading
|
||||
if leadingComments != "" {
|
||||
leadingComments += "\n"
|
||||
}
|
||||
leadingComments += protogen.Comments(fmt.Sprintf(" %v %v %v = %v;\n",
|
||||
xd.Cardinality(), typeName, fieldName, xd.Number()))
|
||||
leadingComments = appendDeprecationSuffix(leadingComments,
|
||||
x.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
|
||||
g.P(leadingComments,
|
||||
"E_", x.GoIdent, " = &", extensionTypesVarName(f), "[", allExtensionsByPtr[x], "]",
|
||||
trailingComment(x.Comments.Trailing))
|
||||
}
|
||||
g.P(")")
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
// genMessageOneofWrapperTypes generates the oneof wrapper types and
|
||||
// associates the types with the parent message type.
|
||||
func genMessageOneofWrapperTypes(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
for _, oneof := range m.Oneofs {
|
||||
if oneof.Desc.IsSynthetic() {
|
||||
continue
|
||||
}
|
||||
ifName := oneofInterfaceName(oneof)
|
||||
g.P("type ", ifName, " interface {")
|
||||
g.P(ifName, "()")
|
||||
g.P("}")
|
||||
g.P()
|
||||
for _, field := range oneof.Fields {
|
||||
g.Annotate(field.GoIdent.GoName, field.Location)
|
||||
g.Annotate(field.GoIdent.GoName+"."+field.GoName, field.Location)
|
||||
g.P("type ", field.GoIdent, " struct {")
|
||||
goType, _ := fieldGoType(g, f, field)
|
||||
tags := structTags{
|
||||
{"protobuf", fieldProtobufTagValue(field)},
|
||||
}
|
||||
if m.isTracked {
|
||||
tags = append(tags, gotrackTags...)
|
||||
}
|
||||
leadingComments := appendDeprecationSuffix(field.Comments.Leading,
|
||||
field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
|
||||
g.P(leadingComments,
|
||||
field.GoName, " ", goType, tags,
|
||||
trailingComment(field.Comments.Trailing))
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
for _, field := range oneof.Fields {
|
||||
g.P("func (*", field.GoIdent, ") ", ifName, "() {}")
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// oneofInterfaceName returns the name of the interface type implemented by
|
||||
// the oneof field value types.
|
||||
func oneofInterfaceName(oneof *protogen.Oneof) string {
|
||||
return "is" + oneof.GoIdent.GoName
|
||||
}
|
||||
|
||||
// genNoInterfacePragma generates a standalone "nointerface" pragma to
|
||||
// decorate methods with field-tracking support.
|
||||
func genNoInterfacePragma(g *protogen.GeneratedFile, tracked bool) {
|
||||
if tracked {
|
||||
g.P("//go:nointerface")
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
var gotrackTags = structTags{{"go", "track"}}
|
||||
|
||||
// structTags is a data structure for build idiomatic Go struct tags.
|
||||
// Each [2]string is a key-value pair, where value is the unescaped string.
|
||||
//
|
||||
// Example: structTags{{"key", "value"}}.String() -> `key:"value"`
|
||||
type structTags [][2]string
|
||||
|
||||
func (tags structTags) String() string {
|
||||
if len(tags) == 0 {
|
||||
return ""
|
||||
}
|
||||
var ss []string
|
||||
for _, tag := range tags {
|
||||
// NOTE: When quoting the value, we need to make sure the backtick
|
||||
// character does not appear. Convert all cases to the escaped hex form.
|
||||
key := tag[0]
|
||||
val := strings.Replace(strconv.Quote(tag[1]), "`", `\x60`, -1)
|
||||
ss = append(ss, fmt.Sprintf("%s:%s", key, val))
|
||||
}
|
||||
return "`" + strings.Join(ss, " ") + "`"
|
||||
}
|
||||
|
||||
// appendDeprecationSuffix optionally appends a deprecation notice as a suffix.
|
||||
func appendDeprecationSuffix(prefix protogen.Comments, deprecated bool) protogen.Comments {
|
||||
if !deprecated {
|
||||
return prefix
|
||||
}
|
||||
if prefix != "" {
|
||||
prefix += "\n"
|
||||
}
|
||||
return prefix + " Deprecated: Do not use.\n"
|
||||
}
|
||||
|
||||
// trailingComment is like protogen.Comments, but lacks a trailing newline.
|
||||
type trailingComment protogen.Comments
|
||||
|
||||
func (c trailingComment) String() string {
|
||||
s := strings.TrimSuffix(protogen.Comments(c).String(), "\n")
|
||||
if strings.Contains(s, "\n") {
|
||||
// We don't support multi-lined trailing comments as it is unclear
|
||||
// how to best render them in the generated code.
|
||||
return ""
|
||||
}
|
||||
return s
|
||||
}
|
351
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go
generated
vendored
Normal file
351
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go
generated
vendored
Normal file
@ -0,0 +1,351 @@
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package internal_gengo
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
"google.golang.org/protobuf/compiler/protogen"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
|
||||
"google.golang.org/protobuf/types/descriptorpb"
|
||||
)
|
||||
|
||||
func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
|
||||
g.P("var ", f.GoDescriptorIdent, " ", protoreflectPackage.Ident("FileDescriptor"))
|
||||
g.P()
|
||||
|
||||
genFileDescriptor(gen, g, f)
|
||||
if len(f.allEnums) > 0 {
|
||||
g.P("var ", enumTypesVarName(f), " = make([]", protoimplPackage.Ident("EnumInfo"), ",", len(f.allEnums), ")")
|
||||
}
|
||||
if len(f.allMessages) > 0 {
|
||||
g.P("var ", messageTypesVarName(f), " = make([]", protoimplPackage.Ident("MessageInfo"), ",", len(f.allMessages), ")")
|
||||
}
|
||||
|
||||
// Generate a unique list of Go types for all declarations and dependencies,
|
||||
// and the associated index into the type list for all dependencies.
|
||||
var goTypes []string
|
||||
var depIdxs []string
|
||||
seen := map[protoreflect.FullName]int{}
|
||||
genDep := func(name protoreflect.FullName, depSource string) {
|
||||
if depSource != "" {
|
||||
line := fmt.Sprintf("%d, // %d: %s -> %s", seen[name], len(depIdxs), depSource, name)
|
||||
depIdxs = append(depIdxs, line)
|
||||
}
|
||||
}
|
||||
genEnum := func(e *protogen.Enum, depSource string) {
|
||||
if e != nil {
|
||||
name := e.Desc.FullName()
|
||||
if _, ok := seen[name]; !ok {
|
||||
line := fmt.Sprintf("(%s)(0), // %d: %s", g.QualifiedGoIdent(e.GoIdent), len(goTypes), name)
|
||||
goTypes = append(goTypes, line)
|
||||
seen[name] = len(seen)
|
||||
}
|
||||
if depSource != "" {
|
||||
genDep(name, depSource)
|
||||
}
|
||||
}
|
||||
}
|
||||
genMessage := func(m *protogen.Message, depSource string) {
|
||||
if m != nil {
|
||||
name := m.Desc.FullName()
|
||||
if _, ok := seen[name]; !ok {
|
||||
line := fmt.Sprintf("(*%s)(nil), // %d: %s", g.QualifiedGoIdent(m.GoIdent), len(goTypes), name)
|
||||
if m.Desc.IsMapEntry() {
|
||||
// Map entry messages have no associated Go type.
|
||||
line = fmt.Sprintf("nil, // %d: %s", len(goTypes), name)
|
||||
}
|
||||
goTypes = append(goTypes, line)
|
||||
seen[name] = len(seen)
|
||||
}
|
||||
if depSource != "" {
|
||||
genDep(name, depSource)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This ordering is significant.
|
||||
// See filetype.TypeBuilder.DependencyIndexes.
|
||||
type offsetEntry struct {
|
||||
start int
|
||||
name string
|
||||
}
|
||||
var depOffsets []offsetEntry
|
||||
for _, enum := range f.allEnums {
|
||||
genEnum(enum.Enum, "")
|
||||
}
|
||||
for _, message := range f.allMessages {
|
||||
genMessage(message.Message, "")
|
||||
}
|
||||
depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "field type_name"})
|
||||
for _, message := range f.allMessages {
|
||||
for _, field := range message.Fields {
|
||||
if field.Desc.IsWeak() {
|
||||
continue
|
||||
}
|
||||
source := string(field.Desc.FullName())
|
||||
genEnum(field.Enum, source+":type_name")
|
||||
genMessage(field.Message, source+":type_name")
|
||||
}
|
||||
}
|
||||
depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "extension extendee"})
|
||||
for _, extension := range f.allExtensions {
|
||||
source := string(extension.Desc.FullName())
|
||||
genMessage(extension.Extendee, source+":extendee")
|
||||
}
|
||||
depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "extension type_name"})
|
||||
for _, extension := range f.allExtensions {
|
||||
source := string(extension.Desc.FullName())
|
||||
genEnum(extension.Enum, source+":type_name")
|
||||
genMessage(extension.Message, source+":type_name")
|
||||
}
|
||||
depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "method input_type"})
|
||||
for _, service := range f.Services {
|
||||
for _, method := range service.Methods {
|
||||
source := string(method.Desc.FullName())
|
||||
genMessage(method.Input, source+":input_type")
|
||||
}
|
||||
}
|
||||
depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "method output_type"})
|
||||
for _, service := range f.Services {
|
||||
for _, method := range service.Methods {
|
||||
source := string(method.Desc.FullName())
|
||||
genMessage(method.Output, source+":output_type")
|
||||
}
|
||||
}
|
||||
depOffsets = append(depOffsets, offsetEntry{len(depIdxs), ""})
|
||||
for i := len(depOffsets) - 2; i >= 0; i-- {
|
||||
curr, next := depOffsets[i], depOffsets[i+1]
|
||||
depIdxs = append(depIdxs, fmt.Sprintf("%d, // [%d:%d] is the sub-list for %s",
|
||||
curr.start, curr.start, next.start, curr.name))
|
||||
}
|
||||
if len(depIdxs) > math.MaxInt32 {
|
||||
panic("too many dependencies") // sanity check
|
||||
}
|
||||
|
||||
g.P("var ", goTypesVarName(f), " = []interface{}{")
|
||||
for _, s := range goTypes {
|
||||
g.P(s)
|
||||
}
|
||||
g.P("}")
|
||||
|
||||
g.P("var ", depIdxsVarName(f), " = []int32{")
|
||||
for _, s := range depIdxs {
|
||||
g.P(s)
|
||||
}
|
||||
g.P("}")
|
||||
|
||||
g.P("func init() { ", initFuncName(f.File), "() }")
|
||||
|
||||
g.P("func ", initFuncName(f.File), "() {")
|
||||
g.P("if ", f.GoDescriptorIdent, " != nil {")
|
||||
g.P("return")
|
||||
g.P("}")
|
||||
|
||||
// Ensure that initialization functions for different files in the same Go
|
||||
// package run in the correct order: Call the init funcs for every .proto file
|
||||
// imported by this one that is in the same Go package.
|
||||
for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ {
|
||||
impFile := gen.FilesByPath[imps.Get(i).Path()]
|
||||
if impFile.GoImportPath != f.GoImportPath {
|
||||
continue
|
||||
}
|
||||
g.P(initFuncName(impFile), "()")
|
||||
}
|
||||
|
||||
if len(f.allMessages) > 0 {
|
||||
// Populate MessageInfo.Exporters.
|
||||
g.P("if !", protoimplPackage.Ident("UnsafeEnabled"), " {")
|
||||
for _, message := range f.allMessages {
|
||||
if sf := f.allMessageFieldsByPtr[message]; len(sf.unexported) > 0 {
|
||||
idx := f.allMessagesByPtr[message]
|
||||
typesVar := messageTypesVarName(f)
|
||||
|
||||
g.P(typesVar, "[", idx, "].Exporter = func(v interface{}, i int) interface{} {")
|
||||
g.P("switch v := v.(*", message.GoIdent, "); i {")
|
||||
for i := 0; i < sf.count; i++ {
|
||||
if name := sf.unexported[i]; name != "" {
|
||||
g.P("case ", i, ": return &v.", name)
|
||||
}
|
||||
}
|
||||
g.P("default: return nil")
|
||||
g.P("}")
|
||||
g.P("}")
|
||||
}
|
||||
}
|
||||
g.P("}")
|
||||
|
||||
// Populate MessageInfo.OneofWrappers.
|
||||
for _, message := range f.allMessages {
|
||||
if len(message.Oneofs) > 0 {
|
||||
idx := f.allMessagesByPtr[message]
|
||||
typesVar := messageTypesVarName(f)
|
||||
|
||||
// Associate the wrapper types by directly passing them to the MessageInfo.
|
||||
g.P(typesVar, "[", idx, "].OneofWrappers = []interface{} {")
|
||||
for _, oneof := range message.Oneofs {
|
||||
if !oneof.Desc.IsSynthetic() {
|
||||
for _, field := range oneof.Fields {
|
||||
g.P("(*", field.GoIdent, ")(nil),")
|
||||
}
|
||||
}
|
||||
}
|
||||
g.P("}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g.P("type x struct{}")
|
||||
g.P("out := ", protoimplPackage.Ident("TypeBuilder"), "{")
|
||||
g.P("File: ", protoimplPackage.Ident("DescBuilder"), "{")
|
||||
g.P("GoPackagePath: ", reflectPackage.Ident("TypeOf"), "(x{}).PkgPath(),")
|
||||
g.P("RawDescriptor: ", rawDescVarName(f), ",")
|
||||
g.P("NumEnums: ", len(f.allEnums), ",")
|
||||
g.P("NumMessages: ", len(f.allMessages), ",")
|
||||
g.P("NumExtensions: ", len(f.allExtensions), ",")
|
||||
g.P("NumServices: ", len(f.Services), ",")
|
||||
g.P("},")
|
||||
g.P("GoTypes: ", goTypesVarName(f), ",")
|
||||
g.P("DependencyIndexes: ", depIdxsVarName(f), ",")
|
||||
if len(f.allEnums) > 0 {
|
||||
g.P("EnumInfos: ", enumTypesVarName(f), ",")
|
||||
}
|
||||
if len(f.allMessages) > 0 {
|
||||
g.P("MessageInfos: ", messageTypesVarName(f), ",")
|
||||
}
|
||||
if len(f.allExtensions) > 0 {
|
||||
g.P("ExtensionInfos: ", extensionTypesVarName(f), ",")
|
||||
}
|
||||
g.P("}.Build()")
|
||||
g.P(f.GoDescriptorIdent, " = out.File")
|
||||
|
||||
// Set inputs to nil to allow GC to reclaim resources.
|
||||
g.P(rawDescVarName(f), " = nil")
|
||||
g.P(goTypesVarName(f), " = nil")
|
||||
g.P(depIdxsVarName(f), " = nil")
|
||||
g.P("}")
|
||||
}
|
||||
|
||||
func genFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
|
||||
descProto := proto.Clone(f.Proto).(*descriptorpb.FileDescriptorProto)
|
||||
descProto.SourceCodeInfo = nil // drop source code information
|
||||
|
||||
b, err := proto.MarshalOptions{AllowPartial: true, Deterministic: true}.Marshal(descProto)
|
||||
if err != nil {
|
||||
gen.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
g.P("var ", rawDescVarName(f), " = []byte{")
|
||||
for len(b) > 0 {
|
||||
n := 16
|
||||
if n > len(b) {
|
||||
n = len(b)
|
||||
}
|
||||
|
||||
s := ""
|
||||
for _, c := range b[:n] {
|
||||
s += fmt.Sprintf("0x%02x,", c)
|
||||
}
|
||||
g.P(s)
|
||||
|
||||
b = b[n:]
|
||||
}
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
if f.needRawDesc {
|
||||
onceVar := rawDescVarName(f) + "Once"
|
||||
dataVar := rawDescVarName(f) + "Data"
|
||||
g.P("var (")
|
||||
g.P(onceVar, " ", syncPackage.Ident("Once"))
|
||||
g.P(dataVar, " = ", rawDescVarName(f))
|
||||
g.P(")")
|
||||
g.P()
|
||||
|
||||
g.P("func ", rawDescVarName(f), "GZIP() []byte {")
|
||||
g.P(onceVar, ".Do(func() {")
|
||||
g.P(dataVar, " = ", protoimplPackage.Ident("X"), ".CompressGZIP(", dataVar, ")")
|
||||
g.P("})")
|
||||
g.P("return ", dataVar)
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
func genEnumReflectMethods(g *protogen.GeneratedFile, f *fileInfo, e *enumInfo) {
|
||||
idx := f.allEnumsByPtr[e]
|
||||
typesVar := enumTypesVarName(f)
|
||||
|
||||
// Descriptor method.
|
||||
g.P("func (", e.GoIdent, ") Descriptor() ", protoreflectPackage.Ident("EnumDescriptor"), " {")
|
||||
g.P("return ", typesVar, "[", idx, "].Descriptor()")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// Type method.
|
||||
g.P("func (", e.GoIdent, ") Type() ", protoreflectPackage.Ident("EnumType"), " {")
|
||||
g.P("return &", typesVar, "[", idx, "]")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// Number method.
|
||||
g.P("func (x ", e.GoIdent, ") Number() ", protoreflectPackage.Ident("EnumNumber"), " {")
|
||||
g.P("return ", protoreflectPackage.Ident("EnumNumber"), "(x)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
|
||||
func genMessageReflectMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
|
||||
idx := f.allMessagesByPtr[m]
|
||||
typesVar := messageTypesVarName(f)
|
||||
|
||||
// ProtoReflect method.
|
||||
g.P("func (x *", m.GoIdent, ") ProtoReflect() ", protoreflectPackage.Ident("Message"), " {")
|
||||
g.P("mi := &", typesVar, "[", idx, "]")
|
||||
g.P("if ", protoimplPackage.Ident("UnsafeEnabled"), " && x != nil {")
|
||||
g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))")
|
||||
g.P("if ms.LoadMessageInfo() == nil {")
|
||||
g.P("ms.StoreMessageInfo(mi)")
|
||||
g.P("}")
|
||||
g.P("return ms")
|
||||
g.P("}")
|
||||
g.P("return mi.MessageOf(x)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
|
||||
func fileVarName(f *protogen.File, suffix string) string {
|
||||
prefix := f.GoDescriptorIdent.GoName
|
||||
_, n := utf8.DecodeRuneInString(prefix)
|
||||
prefix = strings.ToLower(prefix[:n]) + prefix[n:]
|
||||
return prefix + "_" + suffix
|
||||
}
|
||||
func rawDescVarName(f *fileInfo) string {
|
||||
return fileVarName(f.File, "rawDesc")
|
||||
}
|
||||
func goTypesVarName(f *fileInfo) string {
|
||||
return fileVarName(f.File, "goTypes")
|
||||
}
|
||||
func depIdxsVarName(f *fileInfo) string {
|
||||
return fileVarName(f.File, "depIdxs")
|
||||
}
|
||||
func enumTypesVarName(f *fileInfo) string {
|
||||
return fileVarName(f.File, "enumTypes")
|
||||
}
|
||||
func messageTypesVarName(f *fileInfo) string {
|
||||
return fileVarName(f.File, "msgTypes")
|
||||
}
|
||||
func extensionTypesVarName(f *fileInfo) string {
|
||||
return fileVarName(f.File, "extTypes")
|
||||
}
|
||||
func initFuncName(f *protogen.File) string {
|
||||
return fileVarName(f, "init")
|
||||
}
|
1080
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go
generated
vendored
Normal file
1080
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1261
vendor/google.golang.org/protobuf/compiler/protogen/protogen.go
generated
vendored
Normal file
1261
vendor/google.golang.org/protobuf/compiler/protogen/protogen.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
653
vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go
generated
vendored
Normal file
653
vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go
generated
vendored
Normal file
@ -0,0 +1,653 @@
|
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Author: kenton@google.com (Kenton Varda)
|
||||
//
|
||||
// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to
|
||||
// change.
|
||||
//
|
||||
// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is
|
||||
// just a program that reads a CodeGeneratorRequest from stdin and writes a
|
||||
// CodeGeneratorResponse to stdout.
|
||||
//
|
||||
// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
|
||||
// of dealing with the raw protocol defined here.
|
||||
//
|
||||
// A plugin executable needs only to be placed somewhere in the path. The
|
||||
// plugin should be named "protoc-gen-$NAME", and will then be used when the
|
||||
// flag "--${NAME}_out" is passed to protoc.
|
||||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// source: google/protobuf/compiler/plugin.proto
|
||||
|
||||
package pluginpb
|
||||
|
||||
import (
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
descriptorpb "google.golang.org/protobuf/types/descriptorpb"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
// Sync with code_generator.h.
|
||||
type CodeGeneratorResponse_Feature int32
|
||||
|
||||
const (
|
||||
CodeGeneratorResponse_FEATURE_NONE CodeGeneratorResponse_Feature = 0
|
||||
CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL CodeGeneratorResponse_Feature = 1
|
||||
)
|
||||
|
||||
// Enum value maps for CodeGeneratorResponse_Feature.
|
||||
var (
|
||||
CodeGeneratorResponse_Feature_name = map[int32]string{
|
||||
0: "FEATURE_NONE",
|
||||
1: "FEATURE_PROTO3_OPTIONAL",
|
||||
}
|
||||
CodeGeneratorResponse_Feature_value = map[string]int32{
|
||||
"FEATURE_NONE": 0,
|
||||
"FEATURE_PROTO3_OPTIONAL": 1,
|
||||
}
|
||||
)
|
||||
|
||||
func (x CodeGeneratorResponse_Feature) Enum() *CodeGeneratorResponse_Feature {
|
||||
p := new(CodeGeneratorResponse_Feature)
|
||||
*p = x
|
||||
return p
|
||||
}
|
||||
|
||||
func (x CodeGeneratorResponse_Feature) String() string {
|
||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||
}
|
||||
|
||||
func (CodeGeneratorResponse_Feature) Descriptor() protoreflect.EnumDescriptor {
|
||||
return file_google_protobuf_compiler_plugin_proto_enumTypes[0].Descriptor()
|
||||
}
|
||||
|
||||
func (CodeGeneratorResponse_Feature) Type() protoreflect.EnumType {
|
||||
return &file_google_protobuf_compiler_plugin_proto_enumTypes[0]
|
||||
}
|
||||
|
||||
func (x CodeGeneratorResponse_Feature) Number() protoreflect.EnumNumber {
|
||||
return protoreflect.EnumNumber(x)
|
||||
}
|
||||
|
||||
// Deprecated: Do not use.
|
||||
func (x *CodeGeneratorResponse_Feature) UnmarshalJSON(b []byte) error {
|
||||
num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*x = CodeGeneratorResponse_Feature(num)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Deprecated: Use CodeGeneratorResponse_Feature.Descriptor instead.
|
||||
func (CodeGeneratorResponse_Feature) EnumDescriptor() ([]byte, []int) {
|
||||
return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2, 0}
|
||||
}
|
||||
|
||||
// The version number of protocol compiler.
|
||||
type Version struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"`
|
||||
Minor *int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"`
|
||||
Patch *int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"`
|
||||
// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
|
||||
// be empty for mainline stable releases.
|
||||
Suffix *string `protobuf:"bytes,4,opt,name=suffix" json:"suffix,omitempty"`
|
||||
}
|
||||
|
||||
func (x *Version) Reset() {
|
||||
*x = Version{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *Version) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*Version) ProtoMessage() {}
|
||||
|
||||
func (x *Version) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use Version.ProtoReflect.Descriptor instead.
|
||||
func (*Version) Descriptor() ([]byte, []int) {
|
||||
return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *Version) GetMajor() int32 {
|
||||
if x != nil && x.Major != nil {
|
||||
return *x.Major
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *Version) GetMinor() int32 {
|
||||
if x != nil && x.Minor != nil {
|
||||
return *x.Minor
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *Version) GetPatch() int32 {
|
||||
if x != nil && x.Patch != nil {
|
||||
return *x.Patch
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *Version) GetSuffix() string {
|
||||
if x != nil && x.Suffix != nil {
|
||||
return *x.Suffix
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// An encoded CodeGeneratorRequest is written to the plugin's stdin.
|
||||
type CodeGeneratorRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// The .proto files that were explicitly listed on the command-line. The
|
||||
// code generator should generate code only for these files. Each file's
|
||||
// descriptor will be included in proto_file, below.
|
||||
FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate,json=fileToGenerate" json:"file_to_generate,omitempty"`
|
||||
// The generator parameter passed on the command-line.
|
||||
Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"`
|
||||
// FileDescriptorProtos for all files in files_to_generate and everything
|
||||
// they import. The files will appear in topological order, so each file
|
||||
// appears before any file that imports it.
|
||||
//
|
||||
// protoc guarantees that all proto_files will be written after
|
||||
// the fields above, even though this is not technically guaranteed by the
|
||||
// protobuf wire format. This theoretically could allow a plugin to stream
|
||||
// in the FileDescriptorProtos and handle them one by one rather than read
|
||||
// the entire set into memory at once. However, as of this writing, this
|
||||
// is not similarly optimized on protoc's end -- it will store all fields in
|
||||
// memory at once before sending them to the plugin.
|
||||
//
|
||||
// Type names of fields and extensions in the FileDescriptorProto are always
|
||||
// fully qualified.
|
||||
ProtoFile []*descriptorpb.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file,json=protoFile" json:"proto_file,omitempty"`
|
||||
// The version number of protocol compiler.
|
||||
CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion" json:"compiler_version,omitempty"`
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorRequest) Reset() {
|
||||
*x = CodeGeneratorRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*CodeGeneratorRequest) ProtoMessage() {}
|
||||
|
||||
func (x *CodeGeneratorRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use CodeGeneratorRequest.ProtoReflect.Descriptor instead.
|
||||
func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) {
|
||||
return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorRequest) GetFileToGenerate() []string {
|
||||
if x != nil {
|
||||
return x.FileToGenerate
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorRequest) GetParameter() string {
|
||||
if x != nil && x.Parameter != nil {
|
||||
return *x.Parameter
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorRequest) GetProtoFile() []*descriptorpb.FileDescriptorProto {
|
||||
if x != nil {
|
||||
return x.ProtoFile
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorRequest) GetCompilerVersion() *Version {
|
||||
if x != nil {
|
||||
return x.CompilerVersion
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// The plugin writes an encoded CodeGeneratorResponse to stdout.
|
||||
type CodeGeneratorResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// Error message. If non-empty, code generation failed. The plugin process
|
||||
// should exit with status code zero even if it reports an error in this way.
|
||||
//
|
||||
// This should be used to indicate errors in .proto files which prevent the
|
||||
// code generator from generating correct code. Errors which indicate a
|
||||
// problem in protoc itself -- such as the input CodeGeneratorRequest being
|
||||
// unparseable -- should be reported by writing a message to stderr and
|
||||
// exiting with a non-zero status code.
|
||||
Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
|
||||
// A bitmask of supported features that the code generator supports.
|
||||
// This is a bitwise "or" of values from the Feature enum.
|
||||
SupportedFeatures *uint64 `protobuf:"varint,2,opt,name=supported_features,json=supportedFeatures" json:"supported_features,omitempty"`
|
||||
File []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"`
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse) Reset() {
|
||||
*x = CodeGeneratorResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*CodeGeneratorResponse) ProtoMessage() {}
|
||||
|
||||
func (x *CodeGeneratorResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use CodeGeneratorResponse.ProtoReflect.Descriptor instead.
|
||||
func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) {
|
||||
return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse) GetError() string {
|
||||
if x != nil && x.Error != nil {
|
||||
return *x.Error
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse) GetSupportedFeatures() uint64 {
|
||||
if x != nil && x.SupportedFeatures != nil {
|
||||
return *x.SupportedFeatures
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File {
|
||||
if x != nil {
|
||||
return x.File
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Represents a single generated file.
|
||||
type CodeGeneratorResponse_File struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// The file name, relative to the output directory. The name must not
|
||||
// contain "." or ".." components and must be relative, not be absolute (so,
|
||||
// the file cannot lie outside the output directory). "/" must be used as
|
||||
// the path separator, not "\".
|
||||
//
|
||||
// If the name is omitted, the content will be appended to the previous
|
||||
// file. This allows the generator to break large files into small chunks,
|
||||
// and allows the generated text to be streamed back to protoc so that large
|
||||
// files need not reside completely in memory at one time. Note that as of
|
||||
// this writing protoc does not optimize for this -- it will read the entire
|
||||
// CodeGeneratorResponse before writing files to disk.
|
||||
Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
|
||||
// If non-empty, indicates that the named file should already exist, and the
|
||||
// content here is to be inserted into that file at a defined insertion
|
||||
// point. This feature allows a code generator to extend the output
|
||||
// produced by another code generator. The original generator may provide
|
||||
// insertion points by placing special annotations in the file that look
|
||||
// like:
|
||||
// @@protoc_insertion_point(NAME)
|
||||
// The annotation can have arbitrary text before and after it on the line,
|
||||
// which allows it to be placed in a comment. NAME should be replaced with
|
||||
// an identifier naming the point -- this is what other generators will use
|
||||
// as the insertion_point. Code inserted at this point will be placed
|
||||
// immediately above the line containing the insertion point (thus multiple
|
||||
// insertions to the same point will come out in the order they were added).
|
||||
// The double-@ is intended to make it unlikely that the generated code
|
||||
// could contain things that look like insertion points by accident.
|
||||
//
|
||||
// For example, the C++ code generator places the following line in the
|
||||
// .pb.h files that it generates:
|
||||
// // @@protoc_insertion_point(namespace_scope)
|
||||
// This line appears within the scope of the file's package namespace, but
|
||||
// outside of any particular class. Another plugin can then specify the
|
||||
// insertion_point "namespace_scope" to generate additional classes or
|
||||
// other declarations that should be placed in this scope.
|
||||
//
|
||||
// Note that if the line containing the insertion point begins with
|
||||
// whitespace, the same whitespace will be added to every line of the
|
||||
// inserted text. This is useful for languages like Python, where
|
||||
// indentation matters. In these languages, the insertion point comment
|
||||
// should be indented the same amount as any inserted code will need to be
|
||||
// in order to work correctly in that context.
|
||||
//
|
||||
// The code generator that generates the initial file and the one which
|
||||
// inserts into it must both run as part of a single invocation of protoc.
|
||||
// Code generators are executed in the order in which they appear on the
|
||||
// command line.
|
||||
//
|
||||
// If |insertion_point| is present, |name| must also be present.
|
||||
InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point,json=insertionPoint" json:"insertion_point,omitempty"`
|
||||
// The file contents.
|
||||
Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"`
|
||||
// Information describing the file content being inserted. If an insertion
|
||||
// point is used, this information will be appropriately offset and inserted
|
||||
// into the code generation metadata for the generated files.
|
||||
GeneratedCodeInfo *descriptorpb.GeneratedCodeInfo `protobuf:"bytes,16,opt,name=generated_code_info,json=generatedCodeInfo" json:"generated_code_info,omitempty"`
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) Reset() {
|
||||
*x = CodeGeneratorResponse_File{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*CodeGeneratorResponse_File) ProtoMessage() {}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use CodeGeneratorResponse_File.ProtoReflect.Descriptor instead.
|
||||
func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) {
|
||||
return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2, 0}
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) GetName() string {
|
||||
if x != nil && x.Name != nil {
|
||||
return *x.Name
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) GetInsertionPoint() string {
|
||||
if x != nil && x.InsertionPoint != nil {
|
||||
return *x.InsertionPoint
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) GetContent() string {
|
||||
if x != nil && x.Content != nil {
|
||||
return *x.Content
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *CodeGeneratorResponse_File) GetGeneratedCodeInfo() *descriptorpb.GeneratedCodeInfo {
|
||||
if x != nil {
|
||||
return x.GeneratedCodeInfo
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_google_protobuf_compiler_plugin_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_google_protobuf_compiler_plugin_proto_rawDesc = []byte{
|
||||
0x0a, 0x25, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||
0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69,
|
||||
0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
|
||||
0x72, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||
0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14,
|
||||
0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d,
|
||||
0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20,
|
||||
0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61,
|
||||
0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68,
|
||||
0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x22, 0xf1, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x64,
|
||||
0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x65, 0x6e,
|
||||
0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c,
|
||||
0x65, 0x54, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70,
|
||||
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
||||
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e,
|
||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||
0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x4c,
|
||||
0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
|
||||
0x6c, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x6f, 0x6d,
|
||||
0x70, 0x69, 0x6c, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x03, 0x0a,
|
||||
0x15, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2d, 0x0a, 0x12,
|
||||
0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72,
|
||||
0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
|
||||
0x74, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x04, 0x66,
|
||||
0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70,
|
||||
0x69, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52,
|
||||
0x04, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0xb1, 0x01, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12,
|
||||
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||
0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x73,
|
||||
0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63,
|
||||
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
|
||||
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
|
||||
0x65, 0x64, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x10, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f,
|
||||
0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
|
||||
0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x38, 0x0a, 0x07, 0x46, 0x65, 0x61,
|
||||
0x74, 0x75, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f,
|
||||
0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52,
|
||||
0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x33, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41,
|
||||
0x4c, 0x10, 0x01, 0x42, 0x57, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
|
||||
0x6c, 0x65, 0x72, 0x42, 0x0c, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x73, 0x5a, 0x29, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
|
||||
0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79,
|
||||
0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x62,
|
||||
}
|
||||
|
||||
var (
|
||||
file_google_protobuf_compiler_plugin_proto_rawDescOnce sync.Once
|
||||
file_google_protobuf_compiler_plugin_proto_rawDescData = file_google_protobuf_compiler_plugin_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_google_protobuf_compiler_plugin_proto_rawDescGZIP() []byte {
|
||||
file_google_protobuf_compiler_plugin_proto_rawDescOnce.Do(func() {
|
||||
file_google_protobuf_compiler_plugin_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_compiler_plugin_proto_rawDescData)
|
||||
})
|
||||
return file_google_protobuf_compiler_plugin_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_google_protobuf_compiler_plugin_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||
var file_google_protobuf_compiler_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||
var file_google_protobuf_compiler_plugin_proto_goTypes = []interface{}{
|
||||
(CodeGeneratorResponse_Feature)(0), // 0: google.protobuf.compiler.CodeGeneratorResponse.Feature
|
||||
(*Version)(nil), // 1: google.protobuf.compiler.Version
|
||||
(*CodeGeneratorRequest)(nil), // 2: google.protobuf.compiler.CodeGeneratorRequest
|
||||
(*CodeGeneratorResponse)(nil), // 3: google.protobuf.compiler.CodeGeneratorResponse
|
||||
(*CodeGeneratorResponse_File)(nil), // 4: google.protobuf.compiler.CodeGeneratorResponse.File
|
||||
(*descriptorpb.FileDescriptorProto)(nil), // 5: google.protobuf.FileDescriptorProto
|
||||
(*descriptorpb.GeneratedCodeInfo)(nil), // 6: google.protobuf.GeneratedCodeInfo
|
||||
}
|
||||
var file_google_protobuf_compiler_plugin_proto_depIdxs = []int32{
|
||||
5, // 0: google.protobuf.compiler.CodeGeneratorRequest.proto_file:type_name -> google.protobuf.FileDescriptorProto
|
||||
1, // 1: google.protobuf.compiler.CodeGeneratorRequest.compiler_version:type_name -> google.protobuf.compiler.Version
|
||||
4, // 2: google.protobuf.compiler.CodeGeneratorResponse.file:type_name -> google.protobuf.compiler.CodeGeneratorResponse.File
|
||||
6, // 3: google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info:type_name -> google.protobuf.GeneratedCodeInfo
|
||||
4, // [4:4] is the sub-list for method output_type
|
||||
4, // [4:4] is the sub-list for method input_type
|
||||
4, // [4:4] is the sub-list for extension type_name
|
||||
4, // [4:4] is the sub-list for extension extendee
|
||||
0, // [0:4] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_google_protobuf_compiler_plugin_proto_init() }
|
||||
func file_google_protobuf_compiler_plugin_proto_init() {
|
||||
if File_google_protobuf_compiler_plugin_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_google_protobuf_compiler_plugin_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*Version); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_google_protobuf_compiler_plugin_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*CodeGeneratorRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_google_protobuf_compiler_plugin_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*CodeGeneratorResponse); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_google_protobuf_compiler_plugin_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*CodeGeneratorResponse_File); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_google_protobuf_compiler_plugin_proto_rawDesc,
|
||||
NumEnums: 1,
|
||||
NumMessages: 4,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_google_protobuf_compiler_plugin_proto_goTypes,
|
||||
DependencyIndexes: file_google_protobuf_compiler_plugin_proto_depIdxs,
|
||||
EnumInfos: file_google_protobuf_compiler_plugin_proto_enumTypes,
|
||||
MessageInfos: file_google_protobuf_compiler_plugin_proto_msgTypes,
|
||||
}.Build()
|
||||
File_google_protobuf_compiler_plugin_proto = out.File
|
||||
file_google_protobuf_compiler_plugin_proto_rawDesc = nil
|
||||
file_google_protobuf_compiler_plugin_proto_goTypes = nil
|
||||
file_google_protobuf_compiler_plugin_proto_depIdxs = nil
|
||||
}
|
Reference in New Issue
Block a user