From fab1c8d9a3b0854d1041db56f7dd0ebe70cc9fcc Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Wed, 13 Nov 2019 10:13:28 -0800 Subject: [PATCH] testing/protocmp: switch Enum.Number to be a method Accessing Number as a method, rather than a field paves the way to have Enum potentially implement protoreflect.Enum in the future. Change-Id: Iebe9c0ec12e067decf2121d12fe2fb1549477b32 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/207077 Reviewed-by: Damien Neil --- testing/protocmp/xform.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/testing/protocmp/xform.go b/testing/protocmp/xform.go index 58071627..5d88d2ff 100644 --- a/testing/protocmp/xform.go +++ b/testing/protocmp/xform.go @@ -20,8 +20,8 @@ import ( // Enum is a dynamic representation of a protocol buffer enum that is // suitable for cmp.Equal and cmp.Diff to compare upon. type Enum struct { - Number protoreflect.EnumNumber - ed protoreflect.EnumDescriptor + num protoreflect.EnumNumber + ed protoreflect.EnumDescriptor } // Descriptor returns the enum descriptor. @@ -29,21 +29,26 @@ func (e Enum) Descriptor() protoreflect.EnumDescriptor { return e.ed } +// Number returns the enum value as an integer. +func (e Enum) Number() protoreflect.EnumNumber { + return e.num +} + // Equal reports whether e1 and e2 represent the same enum value. func (e1 Enum) Equal(e2 Enum) bool { if e1.ed.FullName() != e2.ed.FullName() { return false } - return e1.Number == e2.Number + return e1.num == e2.num } // String returns the name of the enum value if known (e.g., "ENUM_VALUE"), // otherwise it returns the formatted decimal enum number (e.g., "14"). func (e Enum) String() string { - if ev := e.ed.Values().ByNumber(e.Number); ev != nil { + if ev := e.ed.Values().ByNumber(e.num); ev != nil { return string(ev.Name()) } - return strconv.Itoa(int(e.Number)) + return strconv.Itoa(int(e.num)) } const messageTypeKey = "@type" @@ -187,7 +192,7 @@ func transformMap(fd protoreflect.FieldDescriptor, mv protoreflect.Map) interfac func transformSingular(fd protoreflect.FieldDescriptor, v protoreflect.Value) interface{} { switch fd.Kind() { case protoreflect.EnumKind: - return Enum{Number: v.Enum(), ed: fd.Enum()} + return Enum{num: v.Enum(), ed: fd.Enum()} case protoreflect.MessageKind, protoreflect.GroupKind: return transformMessage(v.Message()) default: