• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// This schema defines objects that represent a parsed schema, like
2// the binary version of a .fbs file.
3// This could be used to operate on unknown FlatBuffers at runtime.
4// It can even ... represent itself (!)
5
6namespace reflection;
7
8// These must correspond to the enum in idl.h.
9enum BaseType : byte {
10    None,
11    UType,
12    Bool,
13    Byte,
14    UByte,
15    Short,
16    UShort,
17    Int,
18    UInt,
19    Long,
20    ULong,
21    Float,
22    Double,
23    String,
24    Vector,
25    Obj,     // Used for tables & structs.
26    Union,
27    Array,
28    Vector64,
29
30    // Add any new type above this value.
31    MaxBaseType
32}
33
34table Type {
35    base_type:BaseType;
36    element:BaseType = None;  // Only if base_type == Vector
37                              // or base_type == Array.
38    index:int = -1;  // If base_type == Object, index into "objects" below.
39                     // If base_type == Union, UnionType, or integral derived
40                     // from an enum, index into "enums" below.
41                     // If base_type == Vector && element == Union or UnionType.
42    fixed_length:uint16 = 0;  // Only if base_type == Array.
43    /// The size (octets) of the `base_type` field.
44    base_size:uint = 4; // 4 Is a common size due to offsets being that size.
45    /// The size (octets) of the `element` field, if present.
46    element_size:uint = 0;
47}
48
49table KeyValue {
50    key:string (required, key);
51    value:string;
52}
53
54table EnumVal {
55    name:string (required);
56    value:long (key);
57    object:Object (deprecated);
58    union_type:Type;
59    documentation:[string];
60    attributes:[KeyValue];
61}
62
63table Enum {
64    name:string (required, key);
65    values:[EnumVal] (required);  // In order of their values.
66    is_union:bool = false;
67    underlying_type:Type (required);
68    attributes:[KeyValue];
69    documentation:[string];
70    /// File that this Enum is declared in.
71    declaration_file: string;
72}
73
74table Field {
75    name:string (required, key);
76    type:Type (required);
77    id:ushort;
78    offset:ushort;  // Offset into the vtable for tables, or into the struct.
79    default_integer:long = 0;
80    default_real:double = 0.0;
81    deprecated:bool = false;
82    required:bool = false;
83    key:bool = false;
84    attributes:[KeyValue];
85    documentation:[string];
86    optional:bool = false;
87    /// Number of padding octets to always add after this field. Structs only.
88    padding:uint16 = 0;
89    /// If the field uses 64-bit offsets.
90    offset64:bool = false;
91}
92
93table Object {  // Used for both tables and structs.
94    name:string (required, key);
95    fields:[Field] (required);  // Sorted.
96    is_struct:bool = false;
97    minalign:int;
98    bytesize:int;  // For structs.
99    attributes:[KeyValue];
100    documentation:[string];
101    /// File that this Object is declared in.
102    declaration_file: string;
103}
104
105table RPCCall {
106    name:string (required, key);
107    request:Object (required);      // must be a table (not a struct)
108    response:Object (required);     // must be a table (not a struct)
109    attributes:[KeyValue];
110    documentation:[string];
111}
112
113table Service {
114    name:string (required, key);
115    calls:[RPCCall];
116    attributes:[KeyValue];
117    documentation:[string];
118    /// File that this Service is declared in.
119    declaration_file: string;
120}
121
122/// New schema language features that are not supported by old code generators.
123enum AdvancedFeatures : ulong (bit_flags) {
124    AdvancedArrayFeatures,
125    AdvancedUnionFeatures,
126    OptionalScalars,
127    DefaultVectorsAndStrings,
128}
129
130/// File specific information.
131/// Symbols declared within a file may be recovered by iterating over all
132/// symbols and examining the `declaration_file` field.
133table SchemaFile {
134  /// Filename, relative to project root.
135  filename:string (required, key);
136  /// Names of included files, relative to project root.
137  included_filenames:[string];
138}
139
140table Schema {
141    objects:[Object] (required);    // Sorted.
142    enums:[Enum] (required);        // Sorted.
143    file_ident:string;
144    file_ext:string;
145    root_table:Object;
146    services:[Service];             // Sorted.
147    advanced_features:AdvancedFeatures;
148    /// All the files used in this compilation. Files are relative to where
149    /// flatc was invoked.
150    fbs_files:[SchemaFile];         // Sorted.
151}
152
153root_type Schema;
154
155file_identifier "BFBS";
156file_extension "bfbs";
157