mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-06 21:37:36 +00:00
Added support for nested flatbuffers serializing to json (#4391)
* added bool for nested_flatbuffer setting bool flag nested_flatbuffer according to attributes setting nested type * added JSON serialization for nested flatbuffers * simplified lookup of nested_flatbuffer StructDef * added nested_flatbuffer parsing workound relying on flexbuffers * moved nested flatbuffer parsing into its own function for clarity removed flexbuffers workound to simplify and speed up nested_flatbuffer parsing added support for 'legacy' nested_flatbuffers, ubyte arrays * inlined functions for nested parser init/clean since only used once * whitespace formatting * changed type of FieldDef.nested_flatbuffer from bool to StructDef* removed subsequent type lookups * removed copies of unrequired data when initializing nested parser * applied changes requested by reviewer * removed superfluous lookup of nested_flatbuffer field attributes * renamed camelCased variables to snake_case
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
360c34467c
commit
89a68942ac
@@ -232,7 +232,7 @@ struct Definition {
|
||||
|
||||
struct FieldDef : public Definition {
|
||||
FieldDef() : deprecated(false), required(false), key(false),
|
||||
flexbuffer(false), padding(0) {}
|
||||
flexbuffer(false), nested_flatbuffer(NULL), padding(0) {}
|
||||
|
||||
Offset<reflection::Field> Serialize(FlatBufferBuilder *builder, uint16_t id,
|
||||
const Parser &parser) const;
|
||||
@@ -245,6 +245,7 @@ struct FieldDef : public Definition {
|
||||
bool native_inline; // Field will be defined inline (instead of as a pointer)
|
||||
// for native tables if field is a struct.
|
||||
bool flexbuffer; // This field contains FlexBuffer data.
|
||||
StructDef *nested_flatbuffer; // This field contains nested FlatBuffer data.
|
||||
size_t padding; // Bytes to always pad after this field.
|
||||
};
|
||||
|
||||
@@ -602,6 +603,9 @@ private:
|
||||
FLATBUFFERS_CHECKED_ERROR ParseVectorDelimiters(
|
||||
size_t &count, ParseVectorDelimitersBody body, void *state);
|
||||
FLATBUFFERS_CHECKED_ERROR ParseVector(const Type &type, uoffset_t *ovalue);
|
||||
FLATBUFFERS_CHECKED_ERROR ParseNestedFlatbuffer(Value &val, FieldDef *field,
|
||||
size_t parent_fieldn,
|
||||
const StructDef *parent_struct_def);
|
||||
FLATBUFFERS_CHECKED_ERROR ParseMetaData(SymbolTable<Value> *attributes);
|
||||
FLATBUFFERS_CHECKED_ERROR TryTypedValue(int dtoken, bool check, Value &e,
|
||||
BaseType req, bool *destmatch);
|
||||
|
||||
Reference in New Issue
Block a user