Improve error message when text unmarshaling a nested message with a required field.
Signed-off-by: David Symonds <dsymonds@golang.org>
diff --git a/proto/testdata/test.proto b/proto/testdata/test.proto
index 698c8ce..f607113 100644
--- a/proto/testdata/test.proto
+++ b/proto/testdata/test.proto
@@ -237,6 +237,10 @@
extensions 100 to max;
}
+message RequiredInnerMessage {
+ required InnerMessage leo_finally_won_an_oscar = 1;
+}
+
message MyMessage {
required int32 count = 1;
optional string name = 2;
@@ -244,6 +248,7 @@
repeated string pet = 4;
optional InnerMessage inner = 5;
repeated OtherMessage others = 6;
+ optional RequiredInnerMessage we_must_go_deeper = 13;
repeated InnerMessage rep_inner = 12;
enum Color {
diff --git a/proto/text_parser.go b/proto/text_parser.go
index b5e1c8e..b5fba5b 100644
--- a/proto/text_parser.go
+++ b/proto/text_parser.go
@@ -663,7 +663,8 @@
return err
}
reqFieldErr = err
- } else if props.Required {
+ }
+ if props.Required {
reqCount--
}
diff --git a/proto/text_parser_test.go b/proto/text_parser_test.go
index d2e4cca..32c4117 100644
--- a/proto/text_parser_test.go
+++ b/proto/text_parser_test.go
@@ -336,6 +336,16 @@
},
},
+ // Missing required field in a required submessage
+ {
+ in: `count: 42 we_must_go_deeper < leo_finally_won_an_oscar <> >`,
+ err: `proto: required field "testdata.InnerMessage.host" not set`,
+ out: &MyMessage{
+ Count: Int32(42),
+ WeMustGoDeeper: &RequiredInnerMessage{LeoFinallyWonAnOscar: &InnerMessage{}},
+ },
+ },
+
// Repeated non-repeated field
{
in: `name: "Rob" name: "Russ"`,