From d578ccfa126e98a8ebb2bdac63fe9cd18560b9ae Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Thu, 9 Jun 2016 16:32:52 -0700 Subject: [PATCH] Add fileDescWireFormatContainingExtension and handle file_containing_extension --- reflection/serverreflection.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/reflection/serverreflection.go b/reflection/serverreflection.go index 69869dfcb..44bc1668d 100644 --- a/reflection/serverreflection.go +++ b/reflection/serverreflection.go @@ -255,6 +255,22 @@ func (s *serverReflectionServer) fileDescWireFormatContainingSymbol(name string) 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) { m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message) if !ok { @@ -295,6 +311,14 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio } response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}} 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_ListServices: default: