1// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5library fidl.examples.types;
6
7struct this_is_a_struct {
8    string s;
9};
10
11union this_is_a_union {
12    string s;
13};
14
15interface this_is_an_interface {
16    23: Copy(string s, uint32 count) -> (string s);
17};
18
19struct interfaces_and_requests {
20    this_is_an_interface nonnullable_interface;
21    this_is_an_interface? nullable_interface;
22    request<this_is_an_interface> nonnullable_request;
23    request<this_is_an_interface>? nullable_request;
24};
25
26struct primitive_types {
27    bool b;
28    int8 i8;
29    int16 i16;
30    int32 i32;
31    int64 i64;
32    uint8 u8;
33    uint16 u16;
34    uint32 u32;
35    uint64 u64;
36    float32 f32;
37    float64 f64;
38};
39
40struct default_values {
41    bool b1 = true;
42    bool b2 = false;
43    int8 i8 = -23;
44    int16 i16 = 34;
45    int32 i32 = -34595;
46    int64 i64 = 3948038;
47    uint8 u8 = 0;
48    uint16 u16 = 348;
49    uint32 u32 = 9038;
50    uint64 u64 = 19835;
51    float32 f32 = 1.30;
52    float64 f64 = 0.0000054;
53    string s = "hello";
54};
55
56const uint32 arrays_size = 32;
57
58struct arrays {
59    array<bool>:1 b_0;
60    array<int8>:1 i8_0;
61    array<int16>:1 i16_0;
62    array<int32>:1 i32_0;
63    array<int64>:1 i64_0;
64    array<uint8>:1 u8_0;
65    array<uint16>:1 u16_0;
66    array<uint32>:1 u32_0;
67    array<uint64>:1 u64_0;
68    array<float32>:1 f32_0;
69    array<float64>:1 f64_0;
70    array<handle>:1 handle_0;
71
72    array<bool>:arrays_size b_1;
73    array<int8>:arrays_size i8_1;
74    array<int16>:arrays_size i16_1;
75    array<int32>:arrays_size i32_1;
76    array<int64>:arrays_size i64_1;
77    array<uint8>:arrays_size u8_1;
78    array<uint16>:arrays_size u16_1;
79    array<uint32>:arrays_size u32_1;
80    array<uint64>:arrays_size u64_1;
81    array<float32>:arrays_size f32_1;
82    array<float64>:arrays_size f64_1;
83    array<handle>:arrays_size handle_1;
84
85    array<array<bool>:4>:arrays_size b_2;
86    array<array<int8>:4>:arrays_size i8_2;
87    array<array<int16>:4>:arrays_size i16_2;
88    array<array<int32>:4>:arrays_size i32_2;
89    array<array<int64>:4>:arrays_size i64_2;
90    array<array<uint8>:4>:arrays_size u8_2;
91    array<array<uint16>:4>:arrays_size u16_2;
92    array<array<uint32>:4>:arrays_size u32_2;
93    array<array<uint64>:4>:arrays_size u64_2;
94    array<array<float32>:4>:arrays_size f32_2;
95    array<array<float64>:4>:arrays_size f64_2;
96    array<array<handle>:4>:arrays_size handle_2;
97};
98
99const uint32 vectors_size = 32;
100
101struct vectors {
102    vector<bool> b_0;
103    vector<int8> i8_0;
104    vector<int16> i16_0;
105    vector<int32> i32_0;
106    vector<int64> i64_0;
107    vector<uint8> u8_0;
108    vector<uint16> u16_0;
109    vector<uint32> u32_0;
110    vector<uint64> u64_0;
111    vector<float32> f32_0;
112    vector<float64> f64_0;
113    vector<handle> handle_0;
114
115    vector<vector<bool>:4> b_1;
116    vector<vector<int8>:4> i8_1;
117    vector<vector<int16>:4> i16_1;
118    vector<vector<int32>:4> i32_1;
119    vector<vector<int64>:4> i64_1;
120    vector<vector<uint8>:4> u8_1;
121    vector<vector<uint16>:4> u16_1;
122    vector<vector<uint32>:4> u32_1;
123    vector<vector<uint64>:4> u64_1;
124    vector<vector<float32>:4> f32_1;
125    vector<vector<float64>:4> f64_1;
126    vector<vector<handle>:4> handle_1;
127
128    vector<bool>:1 b_sized_0;
129    vector<int8>:1 i8_sized_0;
130    vector<int16>:1 i16_sized_0;
131    vector<int32>:1 i32_sized_0;
132    vector<int64>:1 i64_sized_0;
133    vector<uint8>:1 u8_sized_0;
134    vector<uint16>:1 u16_sized_0;
135    vector<uint32>:1 u32_sized_0;
136    vector<uint64>:1 u64_sized_0;
137    vector<float32>:1 f32_sized_0;
138    vector<float64>:1 f64_sized_0;
139    vector<handle>:1 handle_sized_0;
140
141    vector<bool>:vectors_size b_sized_1;
142    vector<int8>:vectors_size i8_sized_1;
143    vector<int16>:vectors_size i16_sized_1;
144    vector<int32>:vectors_size i32_sized_1;
145    vector<int64>:vectors_size i64_sized_1;
146    vector<uint8>:vectors_size u8_sized_1;
147    vector<uint16>:vectors_size u16_sized_1;
148    vector<uint32>:vectors_size u32_sized_1;
149    vector<uint64>:vectors_size u64_sized_1;
150    vector<float32>:vectors_size f32_sized_1;
151    vector<float64>:vectors_size f64_sized_1;
152    vector<handle>:vectors_size handle_sized_1;
153
154    vector<vector<bool>:4>:vectors_size b_sized_2;
155    vector<vector<int8>:4>:vectors_size i8_sized_2;
156    vector<vector<int16>:4>:vectors_size i16_sized_2;
157    vector<vector<int32>:4>:vectors_size i32_sized_2;
158    vector<vector<int64>:4>:vectors_size i64_sized_2;
159    vector<vector<uint8>:4>:vectors_size u8_sized_2;
160    vector<vector<uint16>:4>:vectors_size u16_sized_2;
161    vector<vector<uint32>:4>:vectors_size u32_sized_2;
162    vector<vector<uint64>:4>:vectors_size u64_sized_2;
163    vector<vector<float32>:4>:vectors_size f32_sized_2;
164    vector<vector<float64>:4>:vectors_size f64_sized_2;
165    vector<vector<handle>:4>:vectors_size handle_sized_2;
166
167    vector<bool>:1? b_nullable_0;
168    vector<int8>:1? i8_nullable_0;
169    vector<int16>:1? i16_nullable_0;
170    vector<int32>:1? i32_nullable_0;
171    vector<int64>:1? i64_nullable_0;
172    vector<uint8>:1? u8_nullable_0;
173    vector<uint16>:1? u16_nullable_0;
174    vector<uint32>:1? u32_nullable_0;
175    vector<uint64>:1? u64_nullable_0;
176    vector<float32>:1? f32_nullable_0;
177    vector<float64>:1? f64_nullable_0;
178    vector<handle>:1? handle_nullable_0;
179
180    vector<vector<bool>:4>? b_nullable_1;
181    vector<vector<int8>:4>? i8_nullable_1;
182    vector<vector<int16>:4>? i16_nullable_1;
183    vector<vector<int32>:4>? i32_nullable_1;
184    vector<vector<int64>:4>? i64_nullable_1;
185    vector<vector<uint8>:4>? u8_nullable_1;
186    vector<vector<uint16>:4>? u16_nullable_1;
187    vector<vector<uint32>:4>? u32_nullable_1;
188    vector<vector<uint64>:4>? u64_nullable_1;
189    vector<vector<float32>:4>? f32_nullable_1;
190    vector<vector<float64>:4>? f64_nullable_1;
191    vector<vector<handle>:4>? handle_nullable_1;
192
193    vector<bool>:1? b_nullable_sized_0;
194    vector<int8>:1? i8_nullable_sized_0;
195    vector<int16>:1? i16_nullable_sized_0;
196    vector<int32>:1? i32_nullable_sized_0;
197    vector<int64>:1? i64_nullable_sized_0;
198    vector<uint8>:1? u8_nullable_sized_0;
199    vector<uint16>:1? u16_nullable_sized_0;
200    vector<uint32>:1? u32_nullable_sized_0;
201    vector<uint64>:1? u64_nullable_sized_0;
202    vector<float32>:1? f32_nullable_sized_0;
203    vector<float64>:1? f64_nullable_sized_0;
204    vector<handle>:1? handle_nullable_sized_0;
205
206    vector<bool>:vectors_size? b_nullable_sized_1;
207    vector<int8>:vectors_size? i8_nullable_sized_1;
208    vector<int16>:vectors_size? i16_nullable_sized_1;
209    vector<int32>:vectors_size? i32_nullable_sized_1;
210    vector<int64>:vectors_size? i64_nullable_sized_1;
211    vector<uint8>:vectors_size? u8_nullable_sized_1;
212    vector<uint16>:vectors_size? u16_nullable_sized_1;
213    vector<uint32>:vectors_size? u32_nullable_sized_1;
214    vector<uint64>:vectors_size? u64_nullable_sized_1;
215    vector<float32>:vectors_size? f32_nullable_sized_1;
216    vector<float64>:vectors_size? f64_nullable_sized_1;
217    vector<handle>:vectors_size? handle_nullable_sized_1;
218
219    vector<vector<bool>:4>:vectors_size? b_nullable_sized_2;
220    vector<vector<int8>:4>:vectors_size? i8_nullable_sized_2;
221    vector<vector<int16>:4>:vectors_size? i16_nullable_sized_2;
222    vector<vector<int32>:4>:vectors_size? i32_nullable_sized_2;
223    vector<vector<int64>:4>:vectors_size? i64_nullable_sized_2;
224    vector<vector<uint8>:4>:vectors_size? u8_nullable_sized_2;
225    vector<vector<uint16>:4>:vectors_size? u16_nullable_sized_2;
226    vector<vector<uint32>:4>:vectors_size? u32_nullable_sized_2;
227    vector<vector<uint64>:4>:vectors_size? u64_nullable_sized_2;
228    vector<vector<float32>:4>:vectors_size? f32_nullable_sized_2;
229    vector<vector<float64>:4>:vectors_size? f64_nullable_sized_2;
230    vector<vector<handle>:4>:vectors_size? handle_nullable_sized_2;
231};
232
233[Awesome]
234struct handles {
235    handle handle_handle;
236    handle<process> process_handle;
237    handle<thread> thread_handle;
238    handle<vmo> vmo_handle;
239    handle<channel> channel_handle;
240    handle<event> event_handle;
241    handle<port> port_handle;
242    handle<interrupt> interrupt_handle;
243    handle<log> log_handle;
244    handle<socket> socket_handle;
245    handle<resource> resource_handle;
246    handle<eventpair> eventpair_handle;
247    handle<job> job_handle;
248    handle<vmar> vmar_handle;
249    handle<fifo> fifo_handle;
250    handle<guest> guest_handle;
251    handle<timer> timer_handle;
252
253    handle? nullable_handle_handle;
254    handle<process>? nullable_process_handle;
255    handle<thread>? nullable_thread_handle;
256    handle<vmo>? nullable_vmo_handle;
257    handle<channel>? nullable_channel_handle;
258    handle<event>? nullable_event_handle;
259    handle<port>? nullable_port_handle;
260    handle<interrupt>? nullable_interrupt_handle;
261    handle<log>? nullable_log_handle;
262    handle<socket>? nullable_socket_handle;
263    handle<resource>? nullable_resource_handle;
264    handle<eventpair>? nullable_eventpair_handle;
265    handle<job>? nullable_job_handle;
266    handle<vmar>? nullable_vmar_handle;
267    handle<fifo>? nullable_fifo_handle;
268    handle<guest>? nullable_guest_handle;
269    handle<timer>? nullable_timer_handle;
270};
271
272const uint32 strings_size = 32;
273
274struct strings {
275    string s;
276    string? nullable_s;
277    string:4 size_0_s;
278    string:strings_size size_1_s;
279    string:4? nullable_size_0_s;
280    string:strings_size? nullable_size_1_s;
281};
282
283enum default_enum {
284    x = 23;
285};
286
287enum i8_enum : int8 {
288    x = 23;
289};
290
291enum i16_enum : int16 {
292    x = 23;
293};
294
295enum i32_enum : int32 {
296    x = 23;
297};
298
299enum i64_enum : int64 {
300    x = 23;
301};
302
303enum u8_enum : uint8 {
304    x = 23;
305};
306
307enum u16_enum : uint16 {
308    x = 23;
309};
310
311enum u32_enum : uint32 {
312    x = 23;
313};
314
315enum u64_enum : uint64 {
316    x = 23;
317};
318
319struct structs {
320    this_is_a_struct s;
321    this_is_a_struct? nullable_s;
322};
323
324struct unions {
325    this_is_a_union s;
326    this_is_a_union? nullable_u;
327};
328
329struct interfaces {
330    this_is_an_interface i;
331    this_is_an_interface? nullable_i;
332};
333
334struct requests {
335    request<this_is_an_interface> r;
336    request<this_is_an_interface>? nullable_r;
337};
338