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  }