// This schema defines objects that represent a parsed schema, like // the binary version of a .fbs file. // This could be used to operate on unknown FlatBuffers at runtime. // It can even ... represent itself (!) namespace reflection; // These must correspond to the enum in idl.h. enum BaseType : byte { None, UType, Bool, Byte, UByte, Short, UShort, Int, UInt, Long, ULong, Float, Double, String, Vector, Obj, // Used for tables & structs. Union, Array, // Add any new type above this value. MaxBaseType } table Type { base_type:BaseType; element:BaseType = None; // Only if base_type == Vector // or base_type == Array. index:int = -1; // If base_type == Object, index into "objects" below. // If base_type == Union, UnionType, or integral derived // from an enum, index into "enums" below. // If base_type == Vector && element == Union or UnionType. fixed_length:uint16 = 0; // Only if base_type == Array. /// The size (octets) of the `base_type` field. base_size:uint = 4; // 4 Is a common size due to offsets being that size. /// The size (octets) of the `element` field, if present. element_size:uint = 0; } table KeyValue { key:string (required, key); value:string; } table EnumVal { name:string (required); value:long (key); object:Object (deprecated); union_type:Type; documentation:[string]; attributes:[KeyValue]; } table Enum { name:string (required, key); values:[EnumVal] (required); // In order of their values. is_union:bool = false; underlying_type:Type (required); attributes:[KeyValue]; documentation:[string]; /// File that this Enum is declared in. declaration_file: string; } table Field { name:string (required, key); type:Type (required); id:ushort; offset:ushort; // Offset into the vtable for tables, or into the struct. default_integer:long = 0; default_real:double = 0.0; deprecated:bool = false; required:bool = false; key:bool = false; attributes:[KeyValue]; documentation:[string]; optional:bool = false; /// Number of padding octets to always add after this field. Structs only. padding:uint16 = 0; } table Object { // Used for both tables and structs. name:string (required, key); fields:[Field] (required); // Sorted. is_struct:bool = false; minalign:int; bytesize:int; // For structs. attributes:[KeyValue]; documentation:[string]; /// File that this Object is declared in. declaration_file: string; } table RPCCall { name:string (required, key); request:Object (required); // must be a table (not a struct) response:Object (required); // must be a table (not a struct) attributes:[KeyValue]; documentation:[string]; } table Service { name:string (required, key); calls:[RPCCall]; attributes:[KeyValue]; documentation:[string]; /// File that this Service is declared in. declaration_file: string; } /// New schema language features that are not supported by old code generators. enum AdvancedFeatures : ulong (bit_flags) { AdvancedArrayFeatures, AdvancedUnionFeatures, OptionalScalars, DefaultVectorsAndStrings, } /// File specific information. /// Symbols declared within a file may be recovered by iterating over all /// symbols and examining the `declaration_file` field. table SchemaFile { /// Filename, relative to project root. filename:string (required, key); /// Names of included files, relative to project root. included_filenames:[string]; } table Schema { objects:[Object] (required); // Sorted. enums:[Enum] (required); // Sorted. file_ident:string; file_ext:string; root_table:Object; services:[Service]; // Sorted. advanced_features:AdvancedFeatures; /// All the files used in this compilation. Files are relative to where /// flatc was invoked. fbs_files:[SchemaFile]; // Sorted. } root_type Schema; file_identifier "BFBS"; file_extension "bfbs";