Add fileDescWireFormatContainingSymbol and handle file_containing_symbol
This commit is contained in:
@ -221,6 +221,40 @@ func (s *serverReflectionServer) fileDescWireFormatByFilename(name string) ([]by
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) fileDescWireFormatContainingSymbol(name string) ([]byte, error) {
|
||||||
|
var (
|
||||||
|
fd *dpb.FileDescriptorProto
|
||||||
|
)
|
||||||
|
// Check if it's a type name.
|
||||||
|
if st, err := s.typeForName(name); err == nil {
|
||||||
|
fd, _, err = s.fileDescForType(st)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Check if it's a service name or method name.
|
||||||
|
meta := s.s.Metadata(name)
|
||||||
|
if meta != nil {
|
||||||
|
if enc, ok := meta.([]byte); ok {
|
||||||
|
fd, err = s.decodeFileDesc(enc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Marshal to wire format.
|
||||||
|
if fd != nil {
|
||||||
|
b, err := proto.Marshal(fd)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unknown symbol: %v", name)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *serverReflectionServer) allExtensionNumbersForType(st reflect.Type) ([]int32, error) {
|
func (s *serverReflectionServer) allExtensionNumbersForType(st reflect.Type) ([]int32, error) {
|
||||||
m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message)
|
m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -254,6 +288,12 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio
|
|||||||
}
|
}
|
||||||
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
||||||
case *rpb.ServerReflectionRequest_FileContainingSymbol:
|
case *rpb.ServerReflectionRequest_FileContainingSymbol:
|
||||||
|
b, err := s.fileDescWireFormatContainingSymbol(req.FileContainingSymbol)
|
||||||
|
if err != nil {
|
||||||
|
// TODO grpc error or send message back
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
||||||
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
||||||
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
||||||
case *rpb.ServerReflectionRequest_ListServices:
|
case *rpb.ServerReflectionRequest_ListServices:
|
||||||
|
Reference in New Issue
Block a user