1// test schema file
2
3include "include_test1.fbs";
4
5namespace MyGame;
6
7table InParentNamespace {}
8
9namespace MyGame.Example2;
10
11table Monster {}  // Test having same name as below, but in different namespace.
12
13namespace MyGame.Example;
14
15attribute "priority";
16
17/// Composite components of Monster color.
18enum Color:ubyte (bit_flags) {
19  Red = 0, // color Red = (1u << 0)
20  /// \brief color Green
21  /// Green is bit_flag with value (1u << 1)
22  Green,
23  /// \brief color Blue (1u << 3)
24  Blue = 3,
25}
26
27enum Race:byte {
28  None = -1,
29  Human = 0,
30  Dwarf,
31  Elf,
32}
33
34union Any { Monster, TestSimpleTableWithEnum, MyGame.Example2.Monster }
35
36union AnyUniqueAliases { M: Monster, TS: TestSimpleTableWithEnum, M2: MyGame.Example2.Monster }
37union AnyAmbiguousAliases { M1: Monster, M2: Monster, M3: Monster }
38
39struct Test { a:short; b:byte; }
40
41table TestSimpleTableWithEnum (csharp_partial, private) {
42  color: Color = Green;
43}
44
45struct Vec3 (force_align: 8) {
46  x:float;
47  y:float;
48  z:float;
49  test1:double;
50  test2:Color;
51  test3:Test;
52}
53
54struct Ability {
55  id:uint(key);
56  distance:uint;
57}
58
59struct StructOfStructs {
60  a: Ability;
61  b: Test;
62  c: Ability;
63}
64
65table Stat {
66  id:string;
67  val:long;
68  count:ushort (key);
69}
70
71table Referrable {
72  id:ulong(key, hash:"fnv1a_64");
73}
74
75/// an example documentation comment: "monster object"
76table Monster {
77  pos:Vec3 (id: 0);
78  hp:short = 100 (id: 2);
79  mana:short = 150 (id: 1);
80  name:string (id: 3, key);
81  color:Color = Blue (id: 6);
82  inventory:[ubyte] (id: 5);
83  friendly:bool = false (deprecated, priority: 1, id: 4);
84  /// an example documentation comment: this will end up in the generated code
85  /// multiline too
86  testarrayoftables:[Monster] (id: 11);
87  testarrayofstring:[string] (id: 10);
88  testarrayofstring2:[string] (id: 28);
89  testarrayofbools:[bool] (id: 24);
90  testarrayofsortedstruct:[Ability] (id: 29);
91  enemy:MyGame.Example.Monster (id:12);  // Test referring by full namespace.
92  test:Any (id: 8);
93  test4:[Test] (id: 9);
94  test5:[Test] (id: 31);
95  testnestedflatbuffer:[ubyte] (id:13, nested_flatbuffer: "Monster");
96  testempty:Stat (id:14);
97  testbool:bool (id:15);
98  testhashs32_fnv1:int (id:16, hash:"fnv1_32");
99  testhashu32_fnv1:uint (id:17, hash:"fnv1_32");
100  testhashs64_fnv1:long (id:18, hash:"fnv1_64");
101  testhashu64_fnv1:ulong (id:19, hash:"fnv1_64");
102  testhashs32_fnv1a:int (id:20, hash:"fnv1a_32");
103  testhashu32_fnv1a:uint (id:21, hash:"fnv1a_32", cpp_type:"Stat");
104  testhashs64_fnv1a:long (id:22, hash:"fnv1a_64");
105  testhashu64_fnv1a:ulong (id:23, hash:"fnv1a_64");
106  testf:float = 3.14159 (id:25);
107  testf2:float = 3 (id:26);
108  testf3:float (id:27);
109  flex:[ubyte] (id:30, flexbuffer);
110  vector_of_longs:[long] (id:32);
111  vector_of_doubles:[double] (id:33);
112  parent_namespace_test:InParentNamespace (id:34);
113  vector_of_referrables:[Referrable](id:35);
114  single_weak_reference:ulong(id:36, hash:"fnv1a_64", cpp_type:"ReferrableT");
115  vector_of_weak_references:[ulong](id:37, hash:"fnv1a_64", cpp_type:"ReferrableT");
116  vector_of_strong_referrables:[Referrable](id:38, cpp_ptr_type:"default_ptr_type");                 //was shared_ptr
117  co_owning_reference:ulong(id:39, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked");  //was shared_ptr as well
118  vector_of_co_owning_references:[ulong](id:40, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"default_ptr_type", cpp_ptr_type_get:".get()");  //was shared_ptr
119  non_owning_reference:ulong(id:41, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:"");                              //was weak_ptr
120  vector_of_non_owning_references:[ulong](id:42, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:"");                 //was weak_ptr
121  any_unique:AnyUniqueAliases(id:44);
122  any_ambiguous:AnyAmbiguousAliases (id:46);
123  vector_of_enums:[Color] (id:47);
124  signed_enum:Race = None (id:48);
125  testrequirednestedflatbuffer:[ubyte] (id:49, nested_flatbuffer: "Monster");
126  scalar_key_sorted_tables:[Stat] (id: 50);
127}
128
129table TypeAliases {
130    i8:int8;
131    u8:uint8;
132    i16:int16;
133    u16:uint16;
134    i32:int32;
135    u32:uint32;
136    i64:int64;
137    u64:uint64;
138    f32:float32;
139    f64:float64;
140    v8:[int8];
141    vf64:[float64];
142}
143
144rpc_service MonsterStorage {
145  Store(Monster):Stat (streaming: "none");
146  Retrieve(Stat):Monster (streaming: "server", idempotent);
147  GetMaxHitPoint(Monster):Stat (streaming: "client");
148  GetMinMaxHitPoints(Monster):Stat (streaming: "bidi");
149}
150
151root_type Monster;
152
153file_identifier "MONS";
154file_extension "mon";
155