From dd2c45bc03b1726e771e05958c9e13f2d7d9597f Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Mon, 16 May 2016 16:33:03 -0700 Subject: [PATCH] Add filenameForType --- reflection/serverreflection.go | 10 ++++++++++ reflection/serverreflection_test.go | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/reflection/serverreflection.go b/reflection/serverreflection.go index e0857e566..e9d0cc137 100644 --- a/reflection/serverreflection.go +++ b/reflection/serverreflection.go @@ -129,3 +129,13 @@ func (s *serverReflectionServer) nameForType(st reflect.Type) (string, error) { func (s *serverReflectionServer) nameForPointer(i interface{}) (string, error) { return s.nameForType(reflect.TypeOf(i).Elem()) } + +func (s *serverReflectionServer) filenameForType(st reflect.Type) (string, error) { + fd, _, err := s.fileDescForType(st) + if err != nil { + return "", err + } + return fd.GetName(), nil +} + +// TODO filenameForMethod and Service diff --git a/reflection/serverreflection_test.go b/reflection/serverreflection_test.go index 94126cdc3..70c2b79b1 100644 --- a/reflection/serverreflection_test.go +++ b/reflection/serverreflection_test.go @@ -71,3 +71,19 @@ func TestNameForPointer(t *testing.T) { } } } + +func TestFilenameForType(t *testing.T) { + for _, test := range []struct { + st reflect.Type + want string + }{ + {reflect.TypeOf(pb.SearchResponse{}), "test.proto"}, + {reflect.TypeOf(pb.SearchResponse_Result{}), "test.proto"}, + } { + r, err := s.filenameForType(test.st) + t.Logf("filenameForType(%q) = %q, %v", test.st, r, err) + if err != nil || r != test.want { + t.Fatalf("filenameForType(%q) = %q, %v, want %q, ", test.st, r, err, test.want) + } + } +}