github.com/renbou/grpcbridge@v0.0.2-0.20240416012907-bcbd8b12648a/internal/bridgetest/testpb/testpb.go (about) 1 package testpb 2 3 import ( 4 "fmt" 5 6 "github.com/renbou/grpcbridge/bridgedesc" 7 "google.golang.org/protobuf/reflect/protodesc" 8 "google.golang.org/protobuf/reflect/protoreflect" 9 "google.golang.org/protobuf/reflect/protoregistry" 10 "google.golang.org/protobuf/types/descriptorpb" 11 "google.golang.org/protobuf/types/dynamicpb" 12 ) 13 14 // TestServiceFDs is a set of the raw protobuf file descriptors for TestService. 15 var ( 16 TestServiceFDs *descriptorpb.FileDescriptorSet 17 TestServiceFileResolver *protoregistry.Files 18 TestServiceTypesResolver *dynamicpb.Types 19 TestServiceDesc *bridgedesc.Target 20 ) 21 22 func init() { 23 file_testsvc_proto_init() 24 TestServiceFDs = fileDescriptors(File_testsvc_proto) 25 TestServiceFileResolver = fileResolver(File_testsvc_proto.Path(), TestServiceFDs) 26 TestServiceTypesResolver = dynamicpb.NewTypes(TestServiceFileResolver) 27 TestServiceDesc = bridgedesc.ParseTarget( 28 "bridgetest", 29 TestServiceFileResolver, 30 TestServiceTypesResolver, 31 []protoreflect.FullName{"grpcbridge.internal.bridgetest.testpb.TestService"}, 32 ) 33 } 34 35 func fileDescriptors(desc protoreflect.FileDescriptor) *descriptorpb.FileDescriptorSet { 36 protoMap := make(map[string]*descriptorpb.FileDescriptorProto) 37 queue := []protoreflect.FileDescriptor{desc} 38 39 for len(queue) > 0 { 40 fd := queue[0] 41 queue = queue[1:] 42 43 if _, ok := protoMap[fd.Path()]; ok { 44 continue 45 } 46 47 protoMap[fd.Path()] = protodesc.ToFileDescriptorProto(fd) 48 49 for i := range fd.Imports().Len() { 50 queue = append(queue, fd.Imports().Get(i)) 51 } 52 } 53 54 protos := make([]*descriptorpb.FileDescriptorProto, 0, len(protoMap)) 55 for _, proto := range protoMap { 56 protos = append(protos, proto) 57 } 58 59 return &descriptorpb.FileDescriptorSet{File: protos} 60 } 61 62 func fileResolver(name string, set *descriptorpb.FileDescriptorSet) *protoregistry.Files { 63 registry, err := protodesc.NewFiles(set) 64 if err != nil { 65 panic(fmt.Sprintf("failed to parse file descriptor set for %s as protoregistry.Files: %s", name, err)) 66 } 67 68 return registry 69 }