diff --git a/README.md b/README.md index 7a628d6..b558ff4 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ See the [examples](examples/) directory for uh...examples. package main import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/plugin" + "google.golang.org/protobuf/proto" + plugin_go "google.golang.org/protobuf/types/pluginpb" "github.com/pseudomuto/protokit" _ "google.golang.org/genproto/googleapis/api/annotations" // Support (google.api.http) option (from google/api/annotations.proto). diff --git a/comments.go b/comments.go index 5f0b9e6..93e8cc5 100644 --- a/comments.go +++ b/comments.go @@ -1,11 +1,11 @@ package protokit import ( - "github.com/golang/protobuf/protoc-gen-go/descriptor" - "bytes" "strconv" "strings" + + descriptor "google.golang.org/protobuf/types/descriptorpb" ) // A Comment describes the leading, trailing, and detached comments for a proto object. See `SourceCodeInfo_Location` in diff --git a/example_plugin_test.go b/example_plugin_test.go index 0dca79e..b74aa92 100644 --- a/example_plugin_test.go +++ b/example_plugin_test.go @@ -1,11 +1,12 @@ package protokit_test import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/pseudomuto/protokit" - "log" + + "google.golang.org/protobuf/proto" + plugin_go "google.golang.org/protobuf/types/pluginpb" + + "github.com/pseudomuto/protokit" ) type plugin struct{} diff --git a/examples/jsonator/main.go b/examples/jsonator/main.go index 6ae3573..eccb5fc 100644 --- a/examples/jsonator/main.go +++ b/examples/jsonator/main.go @@ -1,15 +1,16 @@ package main import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/pseudomuto/protokit" - "google.golang.org/genproto/googleapis/api/annotations" - "bytes" "encoding/json" "fmt" "log" + + "google.golang.org/genproto/googleapis/api/annotations" + "google.golang.org/protobuf/proto" + plugin_go "google.golang.org/protobuf/types/pluginpb" + + "github.com/pseudomuto/protokit" ) func main() { diff --git a/fixtures/fileset.pb b/fixtures/fileset.pb index fae942d..bbd12e9 100644 Binary files a/fixtures/fileset.pb and b/fixtures/fileset.pb differ diff --git a/go.mod b/go.mod index 9ecf959..f044f9c 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,15 @@ module github.com/pseudomuto/protokit -go 1.17 +go 1.22.5 require ( - github.com/golang/protobuf v1.0.0 - github.com/stretchr/testify v1.2.1 - google.golang.org/genproto v0.0.0-20180427144745-86e600f69ee4 + github.com/stretchr/testify v1.9.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 + google.golang.org/protobuf v1.34.2 ) require ( - github.com/davecgh/go-spew v1.1.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 403644e..6441118 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,18 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang/protobuf v1.0.0 h1:lsek0oXi8iFE9L+EXARyHIjU5rlWIhhTkjDz3vHhWWQ= -github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.2.1 h1:52QO5WkIUcHGIR7EnGagH88x1bUzqGXTC5/1bDTUQ7U= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -google.golang.org/genproto v0.0.0-20180427144745-86e600f69ee4 h1:0rk3/gV3HbvCeUzVMhdxV3TEVKMVPDnayjN7sYRmcxY= -google.golang.org/genproto v0.0.0-20180427144745-86e600f69ee4/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 h1:pAjq8XSSzXoP9ya73v/w+9QEAAJNluLrpmMq5qFJQNY= +google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:O6rP0uBq4k0mdi/b4ZEMAZjkhYWhS815kCvaMha4VN8= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/parser.go b/parser.go index 3f2c987..0f467cc 100644 --- a/parser.go +++ b/parser.go @@ -1,12 +1,12 @@ package protokit import ( - "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/golang/protobuf/protoc-gen-go/plugin" - "context" "fmt" "strings" + + descriptor "google.golang.org/protobuf/types/descriptorpb" + plugin_go "google.golang.org/protobuf/types/pluginpb" ) const ( @@ -36,7 +36,7 @@ const ( // // For example, given the following invocation, only booking.proto will be returned even if it imports other protos: // -// protoc --plugin=protoc-gen-test=./test -I. protos/booking.proto +// protoc --plugin=protoc-gen-test=./test -I. protos/booking.proto func ParseCodeGenRequest(req *plugin_go.CodeGeneratorRequest) []*FileDescriptor { allFiles := make(map[string]*FileDescriptor) genFiles := make([]*FileDescriptor, len(req.GetFileToGenerate())) @@ -117,10 +117,10 @@ func parseEnumValues(ctx context.Context, protos []*descriptor.EnumValueDescript longName := fmt.Sprintf("%s.%s", enum.GetLongName(), vd.GetName()) values[i] = &EnumValueDescriptor{ - common: newCommon(file, "", longName), + common: newCommon(file, "", longName), EnumValueDescriptorProto: vd, - Enum: enum, - Comments: file.comments.Get(fmt.Sprintf("%s.%d.%d", enum.path, enumValueCommentPath, i)), + Enum: enum, + Comments: file.comments.Get(fmt.Sprintf("%s.%d.%d", enum.path, enumValueCommentPath, i)), } if vd.Options != nil { values[i].setOptions(vd.Options) diff --git a/parser_test.go b/parser_test.go index 614e593..2192fb4 100644 --- a/parser_test.go +++ b/parser_test.go @@ -1,12 +1,13 @@ package protokit_test import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/stretchr/testify/suite" - "testing" + "github.com/stretchr/testify/suite" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoimpl" + descriptor "google.golang.org/protobuf/types/descriptorpb" + "github.com/pseudomuto/protokit" "github.com/pseudomuto/protokit/utils" ) @@ -37,7 +38,7 @@ func (assert *ParserTest) SetupSuite() { } func registerTestExtensions() { - var E_ExtendFile = &proto.ExtensionDesc{ + var E_ExtendFile = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.FileOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -46,7 +47,7 @@ func registerTestExtensions() { Filename: "extend.proto", } - var E_ExtendService = &proto.ExtensionDesc{ + var E_ExtendService = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.ServiceOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -55,7 +56,7 @@ func registerTestExtensions() { Filename: "extend.proto", } - var E_ExtendMethod = &proto.ExtensionDesc{ + var E_ExtendMethod = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.MethodOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -64,7 +65,7 @@ func registerTestExtensions() { Filename: "extend.proto", } - var E_ExtendEnum = &proto.ExtensionDesc{ + var E_ExtendEnum = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.EnumOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -73,7 +74,7 @@ func registerTestExtensions() { Filename: "extend.proto", } - var E_ExtendEnumValue = &proto.ExtensionDesc{ + var E_ExtendEnumValue = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.EnumValueOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -82,7 +83,7 @@ func registerTestExtensions() { Filename: "extend.proto", } - var E_ExtendMessage = &proto.ExtensionDesc{ + var E_ExtendMessage = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.MessageOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -91,7 +92,7 @@ func registerTestExtensions() { Filename: "extend.proto", } - var E_ExtendField = &proto.ExtensionDesc{ + var E_ExtendField = &protoimpl.ExtensionInfo{ ExtendedType: (*descriptor.FieldOptions)(nil), ExtensionType: (*bool)(nil), Field: 20000, @@ -100,13 +101,13 @@ func registerTestExtensions() { Filename: "extend.proto", } - proto.RegisterExtension(E_ExtendFile) - proto.RegisterExtension(E_ExtendService) - proto.RegisterExtension(E_ExtendMethod) - proto.RegisterExtension(E_ExtendEnum) - proto.RegisterExtension(E_ExtendEnumValue) - proto.RegisterExtension(E_ExtendMessage) - proto.RegisterExtension(E_ExtendField) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendFile) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendService) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendMethod) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendEnum) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendEnumValue) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendMessage) + protoregistry.GlobalTypes.RegisterExtension(E_ExtendField) } func (assert *ParserTest) TestFileParsing() { @@ -288,97 +289,97 @@ func (assert *ParserTest) TestNestedMessages() { func (assert *ParserTest) TestExtendedOptions() { assert.Contains(proto2.OptionExtensions, "com.pseudomuto.protokit.v1.extend_file") - extendedValue, ok := proto2.OptionExtensions["com.pseudomuto.protokit.v1.extend_file"].(*bool) + extendedValue, ok := proto2.OptionExtensions["com.pseudomuto.protokit.v1.extend_file"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) service := proto2.GetService("BookingService") assert.Contains(service.OptionExtensions, "com.pseudomuto.protokit.v1.extend_service") - extendedValue, ok = service.OptionExtensions["com.pseudomuto.protokit.v1.extend_service"].(*bool) + extendedValue, ok = service.OptionExtensions["com.pseudomuto.protokit.v1.extend_service"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) method := service.GetNamedMethod("BookVehicle") assert.Contains(method.OptionExtensions, "com.pseudomuto.protokit.v1.extend_method") - extendedValue, ok = method.OptionExtensions["com.pseudomuto.protokit.v1.extend_method"].(*bool) + extendedValue, ok = method.OptionExtensions["com.pseudomuto.protokit.v1.extend_method"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) message := proto2.GetMessage("Booking") assert.Contains(message.OptionExtensions, "com.pseudomuto.protokit.v1.extend_message") - extendedValue, ok = message.OptionExtensions["com.pseudomuto.protokit.v1.extend_message"].(*bool) + extendedValue, ok = message.OptionExtensions["com.pseudomuto.protokit.v1.extend_message"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) field := message.GetMessageField("payment_received") assert.Contains(field.OptionExtensions, "com.pseudomuto.protokit.v1.extend_field") - extendedValue, ok = field.OptionExtensions["com.pseudomuto.protokit.v1.extend_field"].(*bool) + extendedValue, ok = field.OptionExtensions["com.pseudomuto.protokit.v1.extend_field"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) enum := proto2.GetEnum("BookingType") assert.Contains(enum.OptionExtensions, "com.pseudomuto.protokit.v1.extend_enum") - extendedValue, ok = enum.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum"].(*bool) + extendedValue, ok = enum.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) enumValue := enum.GetNamedValue("FUTURE") assert.Contains(enumValue.OptionExtensions, "com.pseudomuto.protokit.v1.extend_enum_value") - extendedValue, ok = enumValue.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum_value"].(*bool) + extendedValue, ok = enumValue.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum_value"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) assert.Contains(proto3.OptionExtensions, "com.pseudomuto.protokit.v1.extend_file") - extendedValue, ok = proto3.OptionExtensions["com.pseudomuto.protokit.v1.extend_file"].(*bool) + extendedValue, ok = proto3.OptionExtensions["com.pseudomuto.protokit.v1.extend_file"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) service = proto3.GetService("Todo") assert.Contains(service.OptionExtensions, "com.pseudomuto.protokit.v1.extend_service") - extendedValue, ok = service.OptionExtensions["com.pseudomuto.protokit.v1.extend_service"].(*bool) + extendedValue, ok = service.OptionExtensions["com.pseudomuto.protokit.v1.extend_service"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) method = service.GetNamedMethod("CreateList") assert.Contains(method.OptionExtensions, "com.pseudomuto.protokit.v1.extend_method") - extendedValue, ok = method.OptionExtensions["com.pseudomuto.protokit.v1.extend_method"].(*bool) + extendedValue, ok = method.OptionExtensions["com.pseudomuto.protokit.v1.extend_method"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) message = proto3.GetMessage("List") assert.Contains(message.OptionExtensions, "com.pseudomuto.protokit.v1.extend_message") - extendedValue, ok = message.OptionExtensions["com.pseudomuto.protokit.v1.extend_message"].(*bool) + extendedValue, ok = message.OptionExtensions["com.pseudomuto.protokit.v1.extend_message"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) field = message.GetMessageField("name") assert.Contains(field.OptionExtensions, "com.pseudomuto.protokit.v1.extend_field") - extendedValue, ok = field.OptionExtensions["com.pseudomuto.protokit.v1.extend_field"].(*bool) + extendedValue, ok = field.OptionExtensions["com.pseudomuto.protokit.v1.extend_field"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) enum = proto3.GetEnum("ListType") assert.Contains(enum.OptionExtensions, "com.pseudomuto.protokit.v1.extend_enum") - extendedValue, ok = enum.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum"].(*bool) + extendedValue, ok = enum.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) enumValue = enum.GetNamedValue("CHECKLIST") assert.Contains(enumValue.OptionExtensions, "com.pseudomuto.protokit.v1.extend_enum_value") - extendedValue, ok = enumValue.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum_value"].(*bool) + extendedValue, ok = enumValue.OptionExtensions["com.pseudomuto.protokit.v1.extend_enum_value"].(bool) assert.True(ok) - assert.True(*extendedValue) + assert.True(extendedValue) } diff --git a/plugin.go b/plugin.go index f68684b..884ea00 100644 --- a/plugin.go +++ b/plugin.go @@ -1,13 +1,12 @@ package protokit import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/plugin" - "fmt" "io" - "io/ioutil" "os" + + "google.golang.org/protobuf/proto" + plugin_go "google.golang.org/protobuf/types/pluginpb" ) // Plugin describes an interface for running protoc code generator plugins @@ -36,7 +35,7 @@ func RunPluginWithIO(p Plugin, r io.Reader, w io.Writer) error { } func readRequest(r io.Reader) (*plugin_go.CodeGeneratorRequest, error) { - data, err := ioutil.ReadAll(r) + data, err := io.ReadAll(r) if err != nil { return nil, err } diff --git a/plugin_test.go b/plugin_test.go index 95ed221..7fa5841 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,14 +1,14 @@ package protokit_test import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/stretchr/testify/suite" - "bytes" "errors" "testing" + "github.com/stretchr/testify/suite" + "google.golang.org/protobuf/proto" + plugin_go "google.golang.org/protobuf/types/pluginpb" + "github.com/pseudomuto/protokit" "github.com/pseudomuto/protokit/utils" ) @@ -41,7 +41,7 @@ func (assert *PluginTest) TestRunPluginInputError() { out := new(bytes.Buffer) err := protokit.RunPluginWithIO(nil, in, out) - assert.EqualError(err, "proto: can't skip unknown wire type 6 for plugin_go.CodeGeneratorRequest") + assert.ErrorContains(err, "cannot parse invalid wire-format data") assert.Empty(out) } diff --git a/types.go b/types.go index a9ecd93..409534e 100644 --- a/types.go +++ b/types.go @@ -1,11 +1,13 @@ package protokit import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/descriptor" - "fmt" "strings" + + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + descriptor "google.golang.org/protobuf/types/descriptorpb" ) type common struct { @@ -47,19 +49,23 @@ func (c *common) GetFullName() string { return c.FullName } func (c *common) IsProto3() bool { return c.file.GetSyntax() == "proto3" } func getOptions(options proto.Message) (m map[string]interface{}) { - for _, extension := range proto.RegisteredExtensions(options) { - if !proto.HasExtension(options, extension) { - continue - } - ext, err := proto.GetExtension(options, extension) - if err != nil { - continue - } - if m == nil { - m = make(map[string]interface{}) - } - m[extension.Name] = ext - } + protoregistry.GlobalTypes.RangeExtensionsByMessage( + proto.MessageName(options), + func(extensionType protoreflect.ExtensionType) bool { + if !proto.HasExtension(options, extensionType) { + return true + } + + ext := proto.GetExtension(options, extensionType) + if m == nil { + m = make(map[string]interface{}) + } + m[string(extensionType.TypeDescriptor().FullName())] = ext + + return true + }, + ) + return m } diff --git a/utils/protobuf.go b/utils/protobuf.go index 15f57c8..5e0b494 100644 --- a/utils/protobuf.go +++ b/utils/protobuf.go @@ -1,13 +1,13 @@ package utils import ( - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/golang/protobuf/protoc-gen-go/plugin" - "errors" "io/ioutil" "path/filepath" + + "google.golang.org/protobuf/proto" + descriptor "google.golang.org/protobuf/types/descriptorpb" + plugin_go "google.golang.org/protobuf/types/pluginpb" ) // CreateGenRequest creates a codegen request from a `FileDescriptorSet` @@ -46,7 +46,8 @@ OUTERLOOP: // `--descriptor_set_out` flag with `protoc`. // // Example: -// protoc --descriptor_set_out=fileset.pb --include_imports --include_source_info ./booking.proto ./todo.proto +// +// protoc --descriptor_set_out=fileset.pb --include_imports --include_source_info ./booking.proto ./todo.proto func LoadDescriptorSet(pathSegments ...string) (*descriptor.FileDescriptorSet, error) { f, err := ioutil.ReadFile(filepath.Join(pathSegments...)) if err != nil { diff --git a/utils/protobuf_test.go b/utils/protobuf_test.go index d4273d3..fe8197b 100644 --- a/utils/protobuf_test.go +++ b/utils/protobuf_test.go @@ -66,7 +66,7 @@ func (assert *UtilsTest) TestLoadDescriptorSetFileNotFound() { func (assert *UtilsTest) TestLoadDescriptorSetMarshalError() { set, err := utils.LoadDescriptorSet("..", "fixtures", "todo.proto") assert.Nil(set) - assert.EqualError(err, "proto: can't skip unknown wire type 7 for descriptor.FileDescriptorSet") + assert.ErrorContains(err, "cannot parse invalid wire-format data") } func (assert *UtilsTest) TestLoadDescriptor() { @@ -84,7 +84,7 @@ func (assert *UtilsTest) TestLoadDescriptorFileNotFound() { func (assert *UtilsTest) TestLoadDescriptorMarshalError() { proto, err := utils.LoadDescriptor("todo.proto", "..", "fixtures", "todo.proto") assert.Nil(proto) - assert.EqualError(err, "proto: can't skip unknown wire type 7 for descriptor.FileDescriptorSet") + assert.ErrorContains(err, "cannot parse invalid wire-format data") } func (assert *UtilsTest) TestLoadDescriptorDescriptorNotFound() {