goprotobuf: Make text formatting of unknown enum values compatible with C++.
Also remove a registry map that isn't needed.
R=r
CC=golang-dev
https://codereview.appspot.com/9084044
diff --git a/proto/text.go b/proto/text.go
index 28a978e..8c39b8a 100644
--- a/proto/text.go
+++ b/proto/text.go
@@ -246,18 +246,9 @@
continue
}
- var written bool
- var err error
- if props.Enum != "" {
- written, err = tryWriteEnum(w, props.Enum, fv)
- if err != nil {
- return err
- }
- }
- if !written {
- if err := writeAny(w, fv, props); err != nil {
- return err
- }
+ // Enums have a String method, so writeAny will work fine.
+ if err := writeAny(w, fv, props); err != nil {
+ return err
}
if err := w.WriteByte('\n'); err != nil {
@@ -297,25 +288,6 @@
return nil
}
-// tryWriteEnum attempts to write an enum value as a symbolic constant.
-// If the enum is unregistered, nothing is written and false is returned.
-func tryWriteEnum(w *textWriter, enum string, v reflect.Value) (bool, error) {
- v = reflect.Indirect(v)
- if v.Type().Kind() != reflect.Int32 {
- return false, nil
- }
- m, ok := enumNameMaps[enum]
- if !ok {
- return false, nil
- }
- str, ok := m[int32(v.Int())]
- if !ok {
- return false, nil
- }
- _, err := fmt.Fprintf(w, str)
- return true, err
-}
-
// writeAny writes an arbitrary field.
func writeAny(w *textWriter, v reflect.Value, props *Properties) error {
v = reflect.Indirect(v)