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 <dneil@google.com>
diff --git a/testing/protocmp/xform.go b/testing/protocmp/xform.go
index 5807162..5d88d2f 100644
--- a/testing/protocmp/xform.go
+++ b/testing/protocmp/xform.go
@@ -20,8 +20,8 @@
// 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 @@
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 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: