Protobuf: added proper error handling for unknown fields, updated error_codes. Fixed a bug, when errorCode field could be resetted to 0

This commit is contained in:
dsavvinov
2016-08-12 17:33:23 +03:00
parent 041f5a539a
commit 3e31ee9c1b
2 changed files with 8 additions and 2 deletions
@@ -1,3 +1,4 @@
1 - mismatch of expected and actual WireType in parseFieldFrom method 1 - mismatch of expected and actual WireType in parseFieldFrom method
2 - read message of size that exceeds expected in parseFromWithSize method 2 - read message of size that exceeds expected in parseFromWithSize method
3 - read message of size that is not equal to expected. Can occur when deserializing nested message (code generated in C++ method generateSerializationMethods) 3 - read message of size that is not equal to expected. Can occur when deserializing nested message (code generated in C++ method generateSerializationMethods)
4 - unsupported feature: unknown field encountered
@@ -170,6 +170,7 @@ void ClassGenerator::generateMergeMethods(io::Printer *printer) const {
} }
} }
printer->Print("this.errorCode = other.errorCode\n");
printer->Outdent(); printer->Outdent();
printer->Print("}\n"); printer->Print("}\n");
@@ -246,14 +247,18 @@ void ClassGenerator::generateBuildMethod(io::Printer * printer) const {
// pass all fields to constructor of enclosing class // pass all fields to constructor of enclosing class
printer->Print(vars, printer->Print(vars,
"return $returnType$("); "val res = $returnType$(");
for (int i = 0; i < properties.size(); ++i) { for (int i = 0; i < properties.size(); ++i) {
printer->Print(properties[i]->simpleName.c_str()); printer->Print(properties[i]->simpleName.c_str());
if (i + 1 != properties.size()) { if (i + 1 != properties.size()) {
printer->Print(", "); printer->Print(", ");
} }
} }
printer->Print(")\n"); printer->Print(")\n");
printer->Print("res.errorCode = errorCode\n");
printer->Print("return res\n");
printer->Outdent(); printer->Outdent();
printer->Print("}\n"); printer->Print("}\n");
} }
@@ -318,7 +323,7 @@ void ClassGenerator::generateParseMethods(io::Printer *printer) const {
printer->Print("}\n"); printer->Print("}\n");
} }
// TODO: add parsing of unknown fields printer->Print(vars, "else -> errorCode = 4\n");
printer->Outdent(); printer->Outdent();
printer->Print("}\n"); // when-clause printer->Print("}\n"); // when-clause