goprotobuf: export from internal version.
- String() method on enum types for easy printing
- GetExtensions function for getting extensions in bulk
R=r
CC=golang-dev
http://codereview.appspot.com/4300057
diff --git a/compiler/generator/generator.go b/compiler/generator/generator.go
index 9878ef1..7c2a39e 100644
--- a/compiler/generator/generator.go
+++ b/compiler/generator/generator.go
@@ -779,7 +779,7 @@
}
g.Out()
g.P(")")
- g.P("var ", ccTypeName, "_name = map[int32] string {")
+ g.P("var ", ccTypeName, "_name = map[int32]string{")
g.In()
generated := make(map[int32]bool) // avoid duplicate values
for _, e := range enum.Value {
@@ -792,19 +792,27 @@
}
g.Out()
g.P("}")
- g.P("var ", ccTypeName, "_value = map[string] int32 {")
+ g.P("var ", ccTypeName, "_value = map[string]int32{")
g.In()
for _, e := range enum.Value {
g.P(Quote(*e.Name), ": ", e.Number, ",")
}
g.Out()
g.P("}")
+
g.P("func New", ccTypeName, "(x int32) *", ccTypeName, " {")
g.In()
g.P("e := ", ccTypeName, "(x)")
g.P("return &e")
g.Out()
g.P("}")
+
+ g.P("func (x ", ccTypeName, ") String() string {")
+ g.In()
+ g.P("return ", g.ProtoPkg, ".EnumName(", ccTypeName, "_name, int32(x))")
+ g.Out()
+ g.P("}")
+
g.P()
}
diff --git a/compiler/testdata/test.pb.go.golden b/compiler/testdata/test.pb.go.golden
index 4d364e7..bc2c469 100644
--- a/compiler/testdata/test.pb.go.golden
+++ b/compiler/testdata/test.pb.go.golden
@@ -19,11 +19,11 @@
HatType_FEDORA = 1
HatType_FEZ = 2
)
-var HatType_name = map[int32] string {
+var HatType_name = map[int32]string{
1: "FEDORA",
2: "FEZ",
}
-var HatType_value = map[string] int32 {
+var HatType_value = map[string]int32{
"FEDORA": 1,
"FEZ": 2,
}
@@ -31,6 +31,9 @@
e := HatType(x)
return &e
}
+func (x HatType) String() string {
+ return proto.EnumName(HatType_name, int32(x))
+}
type Days int32
const (
@@ -38,12 +41,12 @@
Days_TUESDAY = 2
Days_LUNDI = 1
)
-var Days_name = map[int32] string {
+var Days_name = map[int32]string{
1: "MONDAY",
2: "TUESDAY",
// Duplicate value: 1: "LUNDI",
}
-var Days_value = map[string] int32 {
+var Days_value = map[string]int32{
"MONDAY": 1,
"TUESDAY": 2,
"LUNDI": 1,
@@ -52,6 +55,9 @@
e := Days(x)
return &e
}
+func (x Days) String() string {
+ return proto.EnumName(Days_name, int32(x))
+}
type Request_Color int32
const (
@@ -59,12 +65,12 @@
Request_GREEN = 1
Request_BLUE = 2
)
-var Request_Color_name = map[int32] string {
+var Request_Color_name = map[int32]string{
0: "RED",
1: "GREEN",
2: "BLUE",
}
-var Request_Color_value = map[string] int32 {
+var Request_Color_value = map[string]int32{
"RED": 0,
"GREEN": 1,
"BLUE": 2,
@@ -73,17 +79,20 @@
e := Request_Color(x)
return &e
}
+func (x Request_Color) String() string {
+ return proto.EnumName(Request_Color_name, int32(x))
+}
type Reply_Entry_Game int32
const (
Reply_Entry_FOOTBALL = 1
Reply_Entry_TENNIS = 2
)
-var Reply_Entry_Game_name = map[int32] string {
+var Reply_Entry_Game_name = map[int32]string{
1: "FOOTBALL",
2: "TENNIS",
}
-var Reply_Entry_Game_value = map[string] int32 {
+var Reply_Entry_Game_value = map[string]int32{
"FOOTBALL": 1,
"TENNIS": 2,
}
@@ -91,6 +100,9 @@
e := Reply_Entry_Game(x)
return &e
}
+func (x Reply_Entry_Game) String() string {
+ return proto.EnumName(Reply_Entry_Game_name, int32(x))
+}
type Request struct {
Key []int64 "PB(varint,1,rep,name=key)"