goprotobuf: Improve and test JSON output of protocol buffers.
This doesn't completely fix issue 18 (we need the `json:"-"` support),
but the vast majority of messages don't carry unrecognized bytes, nor
use extensions, so this gets 99% of the way there.
Fixes #18.
R=r
CC=golang-dev
http://codereview.appspot.com/5167042
diff --git a/compiler/generator/generator.go b/compiler/generator/generator.go
index c26d324..ca1e576 100644
--- a/compiler/generator/generator.go
+++ b/compiler/generator/generator.go
@@ -735,7 +735,6 @@
}
}
-
// FileOf return the FileDescriptor for this FileDescriptorProto.
func (g *Generator) FileOf(fd *descriptor.FileDescriptorProto) *FileDescriptor {
for _, file := range g.allFiles {
@@ -1124,14 +1123,15 @@
fieldname := CamelCase(*field.Name)
typename, wiretype := g.GoType(message, field)
jsonName := *field.Name
- tag := fmt.Sprintf("`protobuf:%s json:%q`", g.goTag(field, wiretype), jsonName)
+ tag := fmt.Sprintf("`protobuf:%s json:%q`", g.goTag(field, wiretype), jsonName+",omitempty")
g.P(fieldname, "\t", typename, "\t", tag)
g.RecordTypeUse(proto.GetString(field.TypeName))
}
+ // TODO: Use `json:"-"` for these XXX_ fields when that makes it into a Go release.
if len(message.ExtensionRange) > 0 {
- g.P("XXX_extensions\t\tmap[int32]", g.ProtoPkg, ".Extension")
+ g.P("XXX_extensions\t\tmap[int32]", g.ProtoPkg, ".Extension `json:\",omitempty\"`")
}
- g.P("XXX_unrecognized\t[]byte")
+ g.P("XXX_unrecognized\t[]byte `json:\",omitempty\"`")
g.Out()
g.P("}")