mirror of
https://github.com/google/flatbuffers.git
synced 2026-07-03 15:04:12 +00:00
Parser now allows empty tables in JSON
Bug: 16870719 Change-Id: Ia5fdce49a67b1aa621ab1e37a815e2a3293257b6 Tested: on Linux
This commit is contained in:
@@ -191,7 +191,6 @@ static void GenStruct(const StructDef &struct_def, const Table *table,
|
|||||||
std::string *_text) {
|
std::string *_text) {
|
||||||
std::string &text = *_text;
|
std::string &text = *_text;
|
||||||
text += "{";
|
text += "{";
|
||||||
text += NewLine(opts.indent_step);
|
|
||||||
int fieldout = 0;
|
int fieldout = 0;
|
||||||
StructDef *union_sd = nullptr;
|
StructDef *union_sd = nullptr;
|
||||||
for (auto it = struct_def.fields.vec.begin();
|
for (auto it = struct_def.fields.vec.begin();
|
||||||
@@ -202,8 +201,8 @@ static void GenStruct(const StructDef &struct_def, const Table *table,
|
|||||||
// The field is present.
|
// The field is present.
|
||||||
if (fieldout++) {
|
if (fieldout++) {
|
||||||
text += ",";
|
text += ",";
|
||||||
text += NewLine(opts.indent_step);
|
|
||||||
}
|
}
|
||||||
|
text += NewLine(opts.indent_step);
|
||||||
text.append(indent + opts.indent_step, ' ');
|
text.append(indent + opts.indent_step, ' ');
|
||||||
OutputIdentifier(fd.name, opts, _text);
|
OutputIdentifier(fd.name, opts, _text);
|
||||||
text += ": ";
|
text += ": ";
|
||||||
|
|||||||
@@ -420,7 +420,7 @@ void Parser::SerializeStruct(const StructDef &struct_def, const Value &val) {
|
|||||||
uoffset_t Parser::ParseTable(const StructDef &struct_def) {
|
uoffset_t Parser::ParseTable(const StructDef &struct_def) {
|
||||||
Expect('{');
|
Expect('{');
|
||||||
size_t fieldn = 0;
|
size_t fieldn = 0;
|
||||||
for (;;) {
|
if (!IsNext('}')) for (;;) {
|
||||||
std::string name = attribute_;
|
std::string name = attribute_;
|
||||||
if (!IsNext(kTokenStringConstant)) Expect(kTokenIdentifier);
|
if (!IsNext(kTokenStringConstant)) Expect(kTokenIdentifier);
|
||||||
auto field = struct_def.fields.Lookup(name);
|
auto field = struct_def.fields.Lookup(name);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ table Monster {
|
|||||||
test:Any (id: 8);
|
test:Any (id: 8);
|
||||||
test4:[Test] (id: 9);
|
test4:[Test] (id: 9);
|
||||||
testnestedflatbuffer:[ubyte] (id:13, nested_flatbuffer: "Monster");
|
testnestedflatbuffer:[ubyte] (id:13, nested_flatbuffer: "Monster");
|
||||||
|
testempty:Monster (id:14);
|
||||||
}
|
}
|
||||||
|
|
||||||
root_type Monster;
|
root_type Monster;
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ struct Monster : private flatbuffers::Table {
|
|||||||
const Monster *enemy() const { return GetPointer<const Monster *>(28); }
|
const Monster *enemy() const { return GetPointer<const Monster *>(28); }
|
||||||
const flatbuffers::Vector<uint8_t> *testnestedflatbuffer() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(30); }
|
const flatbuffers::Vector<uint8_t> *testnestedflatbuffer() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(30); }
|
||||||
const Monster *testnestedflatbuffer_nested_root() { return flatbuffers::GetRoot<Monster>(testnestedflatbuffer()->Data()); }
|
const Monster *testnestedflatbuffer_nested_root() { return flatbuffers::GetRoot<Monster>(testnestedflatbuffer()->Data()); }
|
||||||
|
const Monster *testempty() const { return GetPointer<const Monster *>(32); }
|
||||||
bool Verify(const flatbuffers::Verifier &verifier) const {
|
bool Verify(const flatbuffers::Verifier &verifier) const {
|
||||||
return VerifyTable(verifier) &&
|
return VerifyTable(verifier) &&
|
||||||
VerifyField<Vec3>(verifier, 4 /* pos */) &&
|
VerifyField<Vec3>(verifier, 4 /* pos */) &&
|
||||||
@@ -119,7 +120,9 @@ struct Monster : private flatbuffers::Table {
|
|||||||
VerifyField<flatbuffers::uoffset_t>(verifier, 28 /* enemy */) &&
|
VerifyField<flatbuffers::uoffset_t>(verifier, 28 /* enemy */) &&
|
||||||
verifier.VerifyTable(enemy()) &&
|
verifier.VerifyTable(enemy()) &&
|
||||||
VerifyField<flatbuffers::uoffset_t>(verifier, 30 /* testnestedflatbuffer */) &&
|
VerifyField<flatbuffers::uoffset_t>(verifier, 30 /* testnestedflatbuffer */) &&
|
||||||
verifier.Verify(testnestedflatbuffer());
|
verifier.Verify(testnestedflatbuffer()) &&
|
||||||
|
VerifyField<flatbuffers::uoffset_t>(verifier, 32 /* testempty */) &&
|
||||||
|
verifier.VerifyTable(testempty());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -139,9 +142,10 @@ struct MonsterBuilder {
|
|||||||
void add_testarrayoftables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables) { fbb_.AddOffset(26, testarrayoftables); }
|
void add_testarrayoftables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables) { fbb_.AddOffset(26, testarrayoftables); }
|
||||||
void add_enemy(flatbuffers::Offset<Monster> enemy) { fbb_.AddOffset(28, enemy); }
|
void add_enemy(flatbuffers::Offset<Monster> enemy) { fbb_.AddOffset(28, enemy); }
|
||||||
void add_testnestedflatbuffer(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer) { fbb_.AddOffset(30, testnestedflatbuffer); }
|
void add_testnestedflatbuffer(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer) { fbb_.AddOffset(30, testnestedflatbuffer); }
|
||||||
|
void add_testempty(flatbuffers::Offset<Monster> testempty) { fbb_.AddOffset(32, testempty); }
|
||||||
MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
||||||
MonsterBuilder &operator=(const MonsterBuilder &);
|
MonsterBuilder &operator=(const MonsterBuilder &);
|
||||||
flatbuffers::Offset<Monster> Finish() { return flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 14)); }
|
flatbuffers::Offset<Monster> Finish() { return flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 15)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
|
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
@@ -157,8 +161,10 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
|
|||||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0,
|
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables = 0,
|
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables = 0,
|
||||||
flatbuffers::Offset<Monster> enemy = 0,
|
flatbuffers::Offset<Monster> enemy = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0) {
|
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0,
|
||||||
|
flatbuffers::Offset<Monster> testempty = 0) {
|
||||||
MonsterBuilder builder_(_fbb);
|
MonsterBuilder builder_(_fbb);
|
||||||
|
builder_.add_testempty(testempty);
|
||||||
builder_.add_testnestedflatbuffer(testnestedflatbuffer);
|
builder_.add_testnestedflatbuffer(testnestedflatbuffer);
|
||||||
builder_.add_enemy(enemy);
|
builder_.add_enemy(enemy);
|
||||||
builder_.add_testarrayoftables(testarrayoftables);
|
builder_.add_testarrayoftables(testarrayoftables);
|
||||||
|
|||||||
@@ -36,5 +36,7 @@
|
|||||||
testarrayofstring: [
|
testarrayofstring: [
|
||||||
"test1",
|
"test1",
|
||||||
"test2"
|
"test2"
|
||||||
]
|
],
|
||||||
|
testempty: {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user