mirror of https://github.com/grpc/grpc-go.git
Add allExtensionNumbersForType
This commit is contained in:
parent
196c123058
commit
8c8bcdd402
|
|
@ -171,3 +171,16 @@ func (s *serverReflectionServer) fileDescContainingExtension(st reflect.Type, ex
|
|||
// TODO filenameContainingExtension
|
||||
// fd := fileDescContainingExtension()
|
||||
// return fd.GetName()
|
||||
|
||||
func (s *serverReflectionServer) allExtensionNumbersForType(st reflect.Type) ([]int32, error) {
|
||||
m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to create message from type: %v", st)
|
||||
}
|
||||
|
||||
var out []int32
|
||||
for id := range proto.RegisteredExtensions(m) {
|
||||
out = append(out, id)
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"reflect"
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
pb "google.golang.org/grpc/reflection/grpc_testing"
|
||||
|
|
@ -89,3 +90,26 @@ func TestFilenameForType(t *testing.T) {
|
|||
}
|
||||
|
||||
// TODO TestFileDescContainingExtension
|
||||
|
||||
// intArray is used to sort []int32
|
||||
type intArray []int32
|
||||
|
||||
func (s intArray) Len() int { return len(s) }
|
||||
func (s intArray) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||||
func (s intArray) Less(i, j int) bool { return s[i] < s[j] }
|
||||
|
||||
func TestAllExtensionNumbersForType(t *testing.T) {
|
||||
for _, test := range []struct {
|
||||
st reflect.Type
|
||||
want []int32
|
||||
}{
|
||||
{reflect.TypeOf(pb.ToBeExtened{}), []int32{13, 17}},
|
||||
} {
|
||||
r, err := s.allExtensionNumbersForType(test.st)
|
||||
sort.Sort(intArray(r))
|
||||
t.Logf("allExtensionNumbersForType(%q) = %v, %v", test.st, r, err)
|
||||
if err != nil || !reflect.DeepEqual(r, test.want) {
|
||||
t.Fatalf("allExtensionNumbersForType(%q) = %v, %v, want %v, <nil>", test.st, r, err, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue