Merge pull request #6562 from kzys/fieldpath
Add protoc-gen-go-fieldpath
This commit is contained in:
		
							
								
								
									
										155
									
								
								cmd/protoc-gen-go-fieldpath/generator.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								cmd/protoc-gen-go-fieldpath/generator.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | |||||||
|  | /* | ||||||
|  |    Copyright The containerd Authors. | ||||||
|  |  | ||||||
|  |    Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |    you may not use this file except in compliance with the License. | ||||||
|  |    You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |        http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |    Unless required by applicable law or agreed to in writing, software | ||||||
|  |    distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |    See the License for the specific language governing permissions and | ||||||
|  |    limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package main | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"google.golang.org/protobuf/compiler/protogen" | ||||||
|  | 	"google.golang.org/protobuf/reflect/protoreflect" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type generator struct { | ||||||
|  | 	out *protogen.GeneratedFile | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func newGenerator(out *protogen.GeneratedFile) *generator { | ||||||
|  | 	gen := generator{out: out} | ||||||
|  | 	return &gen | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gen *generator) genFieldMethod(m *protogen.Message) { | ||||||
|  | 	p := gen.out | ||||||
|  |  | ||||||
|  | 	p.P("// Field returns the value for the given fieldpath as a string, if defined.") | ||||||
|  | 	p.P("// If the value is not defined, the second value will be false.") | ||||||
|  | 	p.P("func (m *", m.GoIdent, ") Field(fieldpath []string) (string, bool) {") | ||||||
|  |  | ||||||
|  | 	var ( | ||||||
|  | 		fields    []*protogen.Field | ||||||
|  | 		unhandled []*protogen.Field | ||||||
|  | 	) | ||||||
|  |  | ||||||
|  | 	for _, f := range m.Fields { | ||||||
|  | 		if f.Desc.Kind() == protoreflect.BoolKind || | ||||||
|  | 			f.Desc.Kind() == protoreflect.StringKind || | ||||||
|  | 			isLabelsField(f) || isAnyField(f) || isMessageField(f) { | ||||||
|  | 			fields = append(fields, f) | ||||||
|  | 		} else { | ||||||
|  | 			unhandled = append(unhandled, f) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(fields) > 0 { | ||||||
|  | 		p.P("if len(fieldpath) == 0 {") | ||||||
|  | 		p.P(`return "", false`) | ||||||
|  | 		p.P("}") | ||||||
|  |  | ||||||
|  | 		p.P("switch fieldpath[0] {") | ||||||
|  |  | ||||||
|  | 		for _, f := range unhandled { | ||||||
|  | 			p.P("// unhandled: ", f.Desc.Name()) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		for _, f := range fields { | ||||||
|  | 			p.P(`case "`, f.Desc.Name(), `":`) | ||||||
|  | 			switch { | ||||||
|  | 			case isLabelsField(f): | ||||||
|  | 				stringsJoin := gen.out.QualifiedGoIdent(protogen.GoIdent{ | ||||||
|  | 					GoImportPath: "strings", | ||||||
|  | 					GoName:       "Join", | ||||||
|  | 				}) | ||||||
|  |  | ||||||
|  | 				p.P(`// Labels fields have been special-cased by name. If this breaks,`) | ||||||
|  | 				p.P(`// add better special casing to fieldpath plugin.`) | ||||||
|  | 				p.P("if len(m.", f.GoName, ") == 0 {") | ||||||
|  | 				p.P(`return "", false`) | ||||||
|  | 				p.P("}") | ||||||
|  | 				p.P("value, ok := m.", f.GoName, "[", stringsJoin, `(fieldpath[1:], ".")]`) | ||||||
|  | 				p.P("return value, ok") | ||||||
|  | 			case isAnyField(f): | ||||||
|  | 				typeurlUnmarshalAny := gen.out.QualifiedGoIdent(protogen.GoIdent{ | ||||||
|  | 					GoImportPath: "github.com/containerd/typeurl", | ||||||
|  | 					GoName:       "UnmarshalAny", | ||||||
|  | 				}) | ||||||
|  |  | ||||||
|  | 				p.P("decoded, err := ", typeurlUnmarshalAny, "(m.", f.GoName, ")") | ||||||
|  | 				p.P("if err != nil {") | ||||||
|  | 				p.P(`return "", false`) | ||||||
|  | 				p.P("}") | ||||||
|  | 				p.P("adaptor, ok := decoded.(interface{ Field([]string) (string, bool) })") | ||||||
|  | 				p.P("if !ok {") | ||||||
|  | 				p.P(`return "", false`) | ||||||
|  | 				p.P("}") | ||||||
|  | 				p.P("return adaptor.Field(fieldpath[1:])") | ||||||
|  | 			case isMessageField(f): | ||||||
|  | 				p.P(`// NOTE(stevvooe): This is probably not correct in many cases.`) | ||||||
|  | 				p.P(`// We assume that the target message also implements the Field`) | ||||||
|  | 				p.P(`// method, which isn't likely true in a lot of cases.`) | ||||||
|  | 				p.P(`//`) | ||||||
|  | 				p.P(`// If you have a broken build and have found this comment,`) | ||||||
|  | 				p.P(`// you may be closer to a solution.`) | ||||||
|  | 				p.P("if m.", f.GoName, " == nil {") | ||||||
|  | 				p.P(`return "", false`) | ||||||
|  | 				p.P("}") | ||||||
|  | 				p.P("return m.", f.GoName, ".Field(fieldpath[1:])") | ||||||
|  | 			case f.Desc.Kind() == protoreflect.StringKind: | ||||||
|  | 				p.P("return string(m.", f.GoName, "), len(m.", f.GoName, ") > 0") | ||||||
|  | 			case f.Desc.Kind() == protoreflect.BoolKind: | ||||||
|  | 				fmtSprint := gen.out.QualifiedGoIdent(protogen.GoIdent{ | ||||||
|  | 					GoImportPath: "fmt", | ||||||
|  | 					GoName:       "Sprint", | ||||||
|  | 				}) | ||||||
|  |  | ||||||
|  | 				p.P("return ", fmtSprint, "(m.", f.GoName, "), true") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		p.P("}") | ||||||
|  | 	} else { | ||||||
|  | 		for _, f := range unhandled { | ||||||
|  | 			p.P("// unhandled: ", f.Desc.Name()) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	p.P(`return "", false`) | ||||||
|  | 	p.P("}") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func isMessageField(f *protogen.Field) bool { | ||||||
|  | 	return f.Desc.Kind() == protoreflect.MessageKind && f.GoIdent.GoName != "Timestamp" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func isLabelsField(f *protogen.Field) bool { | ||||||
|  | 	return f.Desc.Kind() == protoreflect.MessageKind && f.Desc.Name() == "labels" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func isAnyField(f *protogen.Field) bool { | ||||||
|  | 	return f.Desc.Kind() == protoreflect.MessageKind && f.GoIdent.GoName == "Any" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func generate(plugin *protogen.Plugin, input *protogen.File) error { | ||||||
|  | 	file := plugin.NewGeneratedFile(input.GeneratedFilenamePrefix+"_fieldpath.pb.go", input.GoImportPath) | ||||||
|  | 	file.P("// Code generated by protoc-gen-go-fieldpath. DO NOT EDIT.") | ||||||
|  | 	file.P("// source: ", input.Desc.Path()) | ||||||
|  | 	file.P("package ", input.GoPackageName) | ||||||
|  |  | ||||||
|  | 	gen := newGenerator(file) | ||||||
|  | 	for _, m := range input.Messages { | ||||||
|  | 		gen.genFieldMethod(m) | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								cmd/protoc-gen-go-fieldpath/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								cmd/protoc-gen-go-fieldpath/main.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | /* | ||||||
|  |    Copyright The containerd Authors. | ||||||
|  |  | ||||||
|  |    Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |    you may not use this file except in compliance with the License. | ||||||
|  |    You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |        http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |    Unless required by applicable law or agreed to in writing, software | ||||||
|  |    distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |    See the License for the specific language governing permissions and | ||||||
|  |    limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package main | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"google.golang.org/protobuf/compiler/protogen" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func main() { | ||||||
|  | 	protogen.Options{}.Run(func(gen *protogen.Plugin) error { | ||||||
|  | 		for _, f := range gen.Files { | ||||||
|  | 			if !f.Generate { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			if err := generate(gen, f); err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return nil | ||||||
|  | 	}) | ||||||
|  | } | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -545,6 +545,7 @@ google.golang.org/grpc/status | |||||||
| google.golang.org/grpc/tap | google.golang.org/grpc/tap | ||||||
| # google.golang.org/protobuf v1.27.1 | # google.golang.org/protobuf v1.27.1 | ||||||
| ## explicit | ## explicit | ||||||
|  | google.golang.org/protobuf/compiler/protogen | ||||||
| google.golang.org/protobuf/encoding/protojson | google.golang.org/protobuf/encoding/protojson | ||||||
| google.golang.org/protobuf/encoding/prototext | google.golang.org/protobuf/encoding/prototext | ||||||
| google.golang.org/protobuf/encoding/protowire | google.golang.org/protobuf/encoding/protowire | ||||||
| @@ -578,6 +579,7 @@ google.golang.org/protobuf/types/known/anypb | |||||||
| google.golang.org/protobuf/types/known/durationpb | google.golang.org/protobuf/types/known/durationpb | ||||||
| google.golang.org/protobuf/types/known/timestamppb | google.golang.org/protobuf/types/known/timestamppb | ||||||
| google.golang.org/protobuf/types/known/wrapperspb | google.golang.org/protobuf/types/known/wrapperspb | ||||||
|  | google.golang.org/protobuf/types/pluginpb | ||||||
| # gopkg.in/inf.v0 v0.9.1 | # gopkg.in/inf.v0 v0.9.1 | ||||||
| gopkg.in/inf.v0 | gopkg.in/inf.v0 | ||||||
| # gopkg.in/square/go-jose.v2 v2.5.1 | # gopkg.in/square/go-jose.v2 v2.5.1 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Phil Estes
					Phil Estes