internal/genid: add new package for generated identifiers
The genid package unifies the genname, fieldnum, and detectknown
packages into a single package.
Whenever possible use the generated constants rather than
hard-coded literals. This makes it easier to search the entire
module for special logic that deal with well-known types.
Change-Id: I13beff1f4149444a0c0b9e607ebf759657f000f4
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/235301
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/msgfmt/format.go b/internal/msgfmt/format.go
index c2c856f..3ea2745 100644
--- a/internal/msgfmt/format.go
+++ b/internal/msgfmt/format.go
@@ -18,8 +18,8 @@
"time"
"google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/detectknown"
"google.golang.org/protobuf/internal/detrand"
+ "google.golang.org/protobuf/internal/genid"
"google.golang.org/protobuf/internal/mapsort"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
@@ -104,21 +104,21 @@
func appendKnownMessage(b []byte, m protoreflect.Message) []byte {
md := m.Descriptor()
fds := md.Fields()
- switch detectknown.Which(md.FullName()) {
- case detectknown.AnyProto:
+ switch genid.WhichFile(md.FullName()) {
+ case genid.Any_file:
var msgVal protoreflect.Message
- url := m.Get(fds.ByName("type_url")).String()
+ url := m.Get(fds.ByName(genid.Any_TypeUrl_field_name)).String()
if v := reflect.ValueOf(m); v.Type().ConvertibleTo(protocmpMessageType) {
// For protocmp.Message, directly obtain the sub-message value
// which is stored in structured form, rather than as raw bytes.
m2 := v.Convert(protocmpMessageType).Interface().(map[string]interface{})
- v, ok := m2["value"].(proto.Message)
+ v, ok := m2[string(genid.Any_Value_field_name)].(proto.Message)
if !ok {
return nil
}
msgVal = v.ProtoReflect()
} else {
- val := m.Get(fds.ByName("value")).Bytes()
+ val := m.Get(fds.ByName(genid.Any_Value_field_name)).Bytes()
mt, err := protoregistry.GlobalTypes.FindMessageByURL(url)
if err != nil {
return nil
@@ -137,9 +137,9 @@
b = append(b, '}')
return b
- case detectknown.TimestampProto:
- secs := m.Get(fds.ByName("seconds")).Int()
- nanos := m.Get(fds.ByName("nanos")).Int()
+ case genid.Timestamp_file:
+ secs := m.Get(fds.ByName(genid.Timestamp_Seconds_field_name)).Int()
+ nanos := m.Get(fds.ByName(genid.Timestamp_Nanos_field_name)).Int()
if nanos < 0 || nanos >= 1e9 {
return nil
}
@@ -150,9 +150,9 @@
x = strings.TrimSuffix(x, ".000")
return append(b, x+"Z"...)
- case detectknown.DurationProto:
- secs := m.Get(fds.ByName("seconds")).Int()
- nanos := m.Get(fds.ByName("nanos")).Int()
+ case genid.Duration_file:
+ secs := m.Get(fds.ByName(genid.Duration_Seconds_field_name)).Int()
+ nanos := m.Get(fds.ByName(genid.Duration_Nanos_field_name)).Int()
if nanos <= -1e9 || nanos >= 1e9 || (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0) {
return nil
}
@@ -162,8 +162,8 @@
x = strings.TrimSuffix(x, ".000")
return append(b, x+"s"...)
- case detectknown.WrappersProto:
- fd := fds.ByName("value")
+ case genid.Wrappers_file:
+ fd := fds.ByName(genid.WrapperValue_Value_field_name)
return appendValue(b, m.Get(fd), fd)
}