Add fileDescWireFormatContainingExtension and handle file_containing_extension
This commit is contained in:
@ -255,6 +255,22 @@ func (s *serverReflectionServer) fileDescWireFormatContainingSymbol(name string)
|
|||||||
return nil, fmt.Errorf("unknown symbol: %v", name)
|
return nil, fmt.Errorf("unknown symbol: %v", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) fileDescWireFormatContainingExtension(typeName string, extNum int32) ([]byte, error) {
|
||||||
|
st, err := s.typeForName(typeName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
fd, err := s.fileDescContainingExtension(st, extNum)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b, err := proto.Marshal(fd)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
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 {
|
||||||
@ -295,6 +311,14 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio
|
|||||||
}
|
}
|
||||||
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
||||||
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
||||||
|
typeName := req.FileContainingExtension.ContainingType
|
||||||
|
extNum := req.FileContainingExtension.ExtensionNumber
|
||||||
|
b, err := s.fileDescWireFormatContainingExtension(typeName, extNum)
|
||||||
|
if err != nil {
|
||||||
|
// TODO grpc error or send message back
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
||||||
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
||||||
case *rpb.ServerReflectionRequest_ListServices:
|
case *rpb.ServerReflectionRequest_ListServices:
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user