blob: 258558d4f255edcfc1d5a3bed3478287892327fd [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fidl.test.compatibility;
struct this_is_a_struct {
string s;
};
struct this_is_an_empty_struct {
};
union this_is_a_union {
1: string s;
2: bool b;
};
table this_is_a_table {
1: string s;
};
flexible union this_is_a_xunion {
1: string s;
2: bool b;
};
struct primitive_types {
bool b;
int8 i8;
int16 i16;
int32 i32;
int64 i64;
uint8 u8;
uint16 u16;
uint32 u32;
uint64 u64;
float32 f32;
float64 f64;
};
struct default_values {
bool b1 = true;
bool b2 = false;
int8 i8 = -23;
int16 i16 = 34;
int32 i32 = -34595;
int64 i64 = 3948038;
uint8 u8 = 0;
uint16 u16 = 348;
uint32 u32 = 9038;
uint64 u64 = 19835;
float32 f32 = 1.30;
float64 f64 = 0.0000054;
string s = "hello";
};
// Arbitrary, but must be small enough such that a single message doesn't exceed
// kMaxMessageSize or kMaxMessageHandles.
const uint32 arrays_size = 3;
struct arrays {
array<bool>:1 b_0;
array<int8>:1 i8_0;
array<int16>:1 i16_0;
array<int32>:1 i32_0;
array<int64>:1 i64_0;
array<uint8>:1 u8_0;
array<uint16>:1 u16_0;
array<uint32>:1 u32_0;
array<uint64>:1 u64_0;
array<float32>:1 f32_0;
array<float64>:1 f64_0;
array<handle>:1 handle_0;
array<bool>:arrays_size b_1;
array<int8>:arrays_size i8_1;
array<int16>:arrays_size i16_1;
array<int32>:arrays_size i32_1;
array<int64>:arrays_size i64_1;
array<uint8>:arrays_size u8_1;
array<uint16>:arrays_size u16_1;
array<uint32>:arrays_size u32_1;
array<uint64>:arrays_size u64_1;
array<float32>:arrays_size f32_1;
array<float64>:arrays_size f64_1;
array<handle>:arrays_size handle_1;
};
struct arrays_2d {
array<array<bool>:2>:arrays_size b;
array<array<int8>:2>:arrays_size i8;
array<array<int16>:2>:arrays_size i16;
array<array<int32>:2>:arrays_size i32;
array<array<int64>:2>:arrays_size i64;
array<array<uint8>:2>:arrays_size u8;
array<array<uint16>:2>:arrays_size u16;
array<array<uint32>:2>:arrays_size u32;
array<array<uint64>:2>:arrays_size u64;
array<array<float32>:2>:arrays_size f32;
array<array<float64>:2>:arrays_size f64;
array<array<handle>:2>:arrays_size handle_handle;
};
// Arbitrary, but must be small enough such that a single message doesn't exceed
// kMaxMessageSize or kMaxMessageHandles.
const uint32 vectors_size = 3;
struct vectors {
vector<bool> b_0;
vector<int8> i8_0;
vector<int16> i16_0;
vector<int32> i32_0;
vector<int64> i64_0;
vector<uint8> u8_0;
vector<uint16> u16_0;
vector<uint32> u32_0;
vector<uint64> u64_0;
vector<float32> f32_0;
vector<float64> f64_0;
vector<handle> handle_0;
vector<vector<bool>:2> b_1;
vector<vector<int8>:2> i8_1;
vector<vector<int16>:2> i16_1;
vector<vector<int32>:2> i32_1;
vector<vector<int64>:2> i64_1;
vector<vector<uint8>:2> u8_1;
vector<vector<uint16>:2> u16_1;
vector<vector<uint32>:2> u32_1;
vector<vector<uint64>:2> u64_1;
vector<vector<float32>:2> f32_1;
vector<vector<float64>:2> f64_1;
vector<vector<handle>:2> handle_1;
vector<bool>:1 b_sized_0;
vector<int8>:1 i8_sized_0;
vector<int16>:1 i16_sized_0;
vector<int32>:1 i32_sized_0;
vector<int64>:1 i64_sized_0;
vector<uint8>:1 u8_sized_0;
vector<uint16>:1 u16_sized_0;
vector<uint32>:1 u32_sized_0;
vector<uint64>:1 u64_sized_0;
vector<float32>:1 f32_sized_0;
vector<float64>:1 f64_sized_0;
vector<handle>:1 handle_sized_0;
vector<bool>:vectors_size b_sized_1;
vector<int8>:vectors_size i8_sized_1;
vector<int16>:vectors_size i16_sized_1;
vector<int32>:vectors_size i32_sized_1;
vector<int64>:vectors_size i64_sized_1;
vector<uint8>:vectors_size u8_sized_1;
vector<uint16>:vectors_size u16_sized_1;
vector<uint32>:vectors_size u32_sized_1;
vector<uint64>:vectors_size u64_sized_1;
vector<float32>:vectors_size f32_sized_1;
vector<float64>:vectors_size f64_sized_1;
vector<handle>:vectors_size handle_sized_1;
vector<vector<bool>:2>:vectors_size b_sized_2;
vector<vector<int8>:2>:vectors_size i8_sized_2;
vector<vector<int16>:2>:vectors_size i16_sized_2;
vector<vector<int32>:2>:vectors_size i32_sized_2;
vector<vector<int64>:2>:vectors_size i64_sized_2;
vector<vector<uint8>:2>:vectors_size u8_sized_2;
vector<vector<uint16>:2>:vectors_size u16_sized_2;
vector<vector<uint32>:2>:vectors_size u32_sized_2;
vector<vector<uint64>:2>:vectors_size u64_sized_2;
vector<vector<float32>:2>:vectors_size f32_sized_2;
vector<vector<float64>:2>:vectors_size f64_sized_2;
vector<vector<handle>:2>:vectors_size handle_sized_2;
vector<bool>:1? b_nullable_0;
vector<int8>:1? i8_nullable_0;
vector<int16>:1? i16_nullable_0;
vector<int32>:1? i32_nullable_0;
vector<int64>:1? i64_nullable_0;
vector<uint8>:1? u8_nullable_0;
vector<uint16>:1? u16_nullable_0;
vector<uint32>:1? u32_nullable_0;
vector<uint64>:1? u64_nullable_0;
vector<float32>:1? f32_nullable_0;
vector<float64>:1? f64_nullable_0;
vector<handle>:1? handle_nullable_0;
vector<vector<bool>:2>? b_nullable_1;
vector<vector<int8>:2>? i8_nullable_1;
vector<vector<int16>:2>? i16_nullable_1;
vector<vector<int32>:2>? i32_nullable_1;
vector<vector<int64>:2>? i64_nullable_1;
vector<vector<uint8>:2>? u8_nullable_1;
vector<vector<uint16>:2>? u16_nullable_1;
vector<vector<uint32>:2>? u32_nullable_1;
vector<vector<uint64>:2>? u64_nullable_1;
vector<vector<float32>:2>? f32_nullable_1;
vector<vector<float64>:2>? f64_nullable_1;
vector<vector<handle>:2>? handle_nullable_1;
vector<bool>:1? b_nullable_sized_0;
vector<int8>:1? i8_nullable_sized_0;
vector<int16>:1? i16_nullable_sized_0;
vector<int32>:1? i32_nullable_sized_0;
vector<int64>:1? i64_nullable_sized_0;
vector<uint8>:1? u8_nullable_sized_0;
vector<uint16>:1? u16_nullable_sized_0;
vector<uint32>:1? u32_nullable_sized_0;
vector<uint64>:1? u64_nullable_sized_0;
vector<float32>:1? f32_nullable_sized_0;
vector<float64>:1? f64_nullable_sized_0;
vector<handle>:1? handle_nullable_sized_0;
vector<bool>:vectors_size? b_nullable_sized_1;
vector<int8>:vectors_size? i8_nullable_sized_1;
vector<int16>:vectors_size? i16_nullable_sized_1;
vector<int32>:vectors_size? i32_nullable_sized_1;
vector<int64>:vectors_size? i64_nullable_sized_1;
vector<uint8>:vectors_size? u8_nullable_sized_1;
vector<uint16>:vectors_size? u16_nullable_sized_1;
vector<uint32>:vectors_size? u32_nullable_sized_1;
vector<uint64>:vectors_size? u64_nullable_sized_1;
vector<float32>:vectors_size? f32_nullable_sized_1;
vector<float64>:vectors_size? f64_nullable_sized_1;
vector<handle>:vectors_size? handle_nullable_sized_1;
vector<vector<bool>:2>:vectors_size? b_nullable_sized_2;
vector<vector<int8>:2>:vectors_size? i8_nullable_sized_2;
vector<vector<int16>:2>:vectors_size? i16_nullable_sized_2;
vector<vector<int32>:2>:vectors_size? i32_nullable_sized_2;
vector<vector<int64>:2>:vectors_size? i64_nullable_sized_2;
vector<vector<uint8>:2>:vectors_size? u8_nullable_sized_2;
vector<vector<uint16>:2>:vectors_size? u16_nullable_sized_2;
vector<vector<uint32>:2>:vectors_size? u32_nullable_sized_2;
vector<vector<uint64>:2>:vectors_size? u64_nullable_sized_2;
vector<vector<float32>:2>:vectors_size? f32_nullable_sized_2;
vector<vector<float64>:2>:vectors_size? f64_nullable_sized_2;
vector<vector<handle>:2>:vectors_size? handle_nullable_sized_2;
};
// We don't test handle types that don't support duplication
// (supports_duplication in zx/object_traits.h) or that require special
// privileges to create.
struct handles {
handle handle_handle;
handle<process> process_handle;
handle<thread> thread_handle;
handle<vmo> vmo_handle;
handle<event> event_handle;
handle<port> port_handle;
handle<socket> socket_handle;
handle<eventpair> eventpair_handle;
handle<job> job_handle;
handle<vmar> vmar_handle;
handle<fifo> fifo_handle;
handle<timer> timer_handle;
handle? nullable_handle_handle;
handle<process>? nullable_process_handle;
handle<thread>? nullable_thread_handle;
handle<vmo>? nullable_vmo_handle;
handle<channel>? nullable_channel_handle;
handle<event>? nullable_event_handle;
handle<port>? nullable_port_handle;
handle<interrupt>? nullable_interrupt_handle;
handle<debuglog>? nullable_log_handle;
handle<socket>? nullable_socket_handle;
handle<eventpair>? nullable_eventpair_handle;
handle<job>? nullable_job_handle;
handle<vmar>? nullable_vmar_handle;
handle<fifo>? nullable_fifo_handle;
handle<timer>? nullable_timer_handle;
};
// Arbitrary.
const uint32 strings_size = 32;
struct strings {
string s;
string? nullable_s;
string:2 size_0_s;
string:strings_size size_1_s;
string:2? nullable_size_0_s;
string:strings_size? nullable_size_1_s;
};
enum default_enum {
kZero = 0;
kOne = 1;
};
enum i8_enum : int8 {
kNegativeOne = -1;
kOne = 1;
};
enum i16_enum : int16 {
kNegativeOne = -1;
kOne = 1;
kTwo = 2;
};
enum i32_enum : int32 {
kNegativeOne = -1;
kOne = 1;
kTwo = 2;
kThree = 3;
};
enum i64_enum : int64 {
kNegativeOne = -1;
kOne = 1;
kTwo = 2;
kThree = 3;
kFour = 4;
};
enum u8_enum : uint8 {
kOne = 1;
kTwo = 2;
kThree = 3;
kFour = 4;
kFive = 5;
};
enum u16_enum : uint16 {
kOne = 1;
kTwo = 2;
kThree = 3;
kFour = 4;
kFive = 5;
kSix = 6;
};
enum u32_enum : uint32 {
kOne = 1;
kTwo = 2;
kThree = 3;
kFour = 4;
kFive = 5;
kSix = 6;
kSeven = 7;
};
enum u64_enum : uint64 {
kOne = 1;
kTwo = 2;
kThree = 3;
kFour = 4;
kFive = 5;
kSix = 6;
kSeven = 7;
kEight = 8;
};
bits default_bits {
kOne = 1;
kTwo = 2;
};
bits u8_bits : uint8 {
kOne = 1;
kTwo = 2;
kThree = 4;
kFour = 8;
kFive = 16;
};
bits u16_bits : uint16 {
kOne = 1;
kTwo = 2;
kThree = 4;
kFour = 8;
kFive = 16;
kSix = 32;
};
bits u32_bits : uint32 {
kOne = 1;
kTwo = 2;
kThree = 4;
kFour = 8;
kFive = 16;
kSix = 32;
kSeven = 64;
};
bits u64_bits : uint64 {
kOne = 1;
kTwo = 2;
kThree = 4;
kFour = 8;
kFive = 16;
kSix = 32;
kSeven = 64;
kEight = 128;
};
struct structs {
this_is_a_struct s;
this_is_a_struct? nullable_s;
this_is_an_empty_struct es;
};
struct unions {
this_is_a_union u;
this_is_a_union? nullable_u;
};
// This struct is meant to exercise almost all features of FIDL.
struct Struct {
primitive_types primitive_types;
default_values default_values;
arrays arrays;
arrays_2d arrays_2d;
vectors vectors;
handles handles;
strings strings;
default_enum default_enum;
i8_enum i8_enum;
i16_enum i16_enum;
i32_enum i32_enum;
i64_enum i64_enum;
u8_enum u8_enum;
u16_enum u16_enum;
u32_enum u32_enum;
u64_enum u64_enum;
default_bits default_bits;
u8_bits u8_bits;
u16_bits u16_bits;
u32_bits u32_bits;
u64_bits u64_bits;
structs structs;
unions unions;
this_is_a_table table;
this_is_a_xunion xunion;
bool b;
};
// This struct contains arrays of all different kinds of FIDL types.
struct ArraysStruct {
array<bool>:arrays_size bools;
array<int8>:arrays_size int8s;
array<int16>:arrays_size int16s;
array<int32>:arrays_size int32s;
array<int64>:arrays_size int64s;
array<uint8>:arrays_size uint8s;
array<uint16>:arrays_size uint16s;
array<uint32>:arrays_size uint32s;
array<uint64>:arrays_size uint64s;
array<float32>:arrays_size float32s;
array<float64>:arrays_size float64s;
array<default_enum>:arrays_size enums;
array<default_bits>:arrays_size bits;
array<handle>:arrays_size handles;
array<handle?>:arrays_size nullable_handles;
array<string>:arrays_size strings;
array<string?>:arrays_size nullable_strings;
array<this_is_a_struct>:arrays_size structs;
array<this_is_a_struct?>:arrays_size nullable_structs;
array<this_is_a_union>:arrays_size unions;
array<this_is_a_union?>:arrays_size nullable_unions;
array<array<uint32>:arrays_size>:arrays_size arrays;
array<vector<uint32>>:arrays_size vectors;
array<vector<uint32>?>:arrays_size nullable_vectors;
array<this_is_a_table>:arrays_size tables;
array<this_is_a_xunion>:arrays_size xunions;
};
// This struct contains vectors of all different kinds of FIDL types.
struct VectorsStruct {
vector<bool>:vectors_size bools;
vector<int8>:vectors_size int8s;
vector<int16>:vectors_size int16s;
vector<int32>:vectors_size int32s;
vector<int64>:vectors_size int64s;
vector<uint8>:vectors_size uint8s;
vector<uint16>:vectors_size uint16s;
vector<uint32>:vectors_size uint32s;
vector<uint64>:vectors_size uint64s;
vector<float32>:vectors_size float32s;
vector<float64>:vectors_size float64s;
vector<default_enum>:vectors_size enums;
vector<default_bits>:vectors_size bits;
vector<handle>:vectors_size handles;
vector<handle?>:vectors_size nullable_handles;
vector<string>:vectors_size strings;
vector<string?>:vectors_size nullable_strings;
vector<this_is_a_struct>:vectors_size structs;
vector<this_is_a_struct?>:vectors_size nullable_structs;
vector<this_is_a_union>:vectors_size unions;
vector<this_is_a_union?>:vectors_size nullable_unions;
vector<array<uint32>:vectors_size>:vectors_size arrays;
vector<vector<uint32>>:vectors_size vectors;
vector<vector<uint32>?>:vectors_size nullable_vectors;
vector<this_is_a_table>:vectors_size tables;
vector<this_is_a_xunion>:vectors_size xunions;
};
// This table has members all different FIDL types.
table AllTypesTable {
1: bool bool_member;
2: int8 int8_member;
3: int16 int16_member;
4: int32 int32_member;
5: int64 int64_member;
6: uint8 uint8_member;
7: uint16 uint16_member;
8: uint32 uint32_member;
9: uint64 uint64_member;
10: float32 float32_member;
11: float64 float64_member;
12: default_enum enum_member;
13: default_bits bits_member;
14: handle handle_member;
15: string string_member;
16: this_is_a_struct struct_member;
17: this_is_a_union union_member;
18: array<uint32>:arrays_size array_member;
19: vector<uint32> vector_member;
20: this_is_a_table table_member;
21: this_is_a_xunion xunion_member;
};
// This xunion has members all different FIDL types.
flexible union AllTypesXunion {
1: bool bool_member;
2: int8 int8_member;
3: int16 int16_member;
4: int32 int32_member;
5: int64 int64_member;
6: uint8 uint8_member;
7: uint16 uint16_member;
8: uint32 uint32_member;
9: uint64 uint64_member;
10: float32 float32_member;
11: float64 float64_member;
12: default_enum enum_member;
13: default_bits bits_member;
14: handle handle_member;
15: string string_member;
16: this_is_a_struct struct_member;
17: this_is_a_union union_member;
18: array<uint32>:arrays_size array_member;
19: vector<uint32> vector_member;
20: this_is_a_table table_member;
21: this_is_a_xunion xunion_member;
};
enum RespondWith {
SUCCESS = 1;
ERR = 2;
};
[Discoverable]
protocol Echo {
// If `forward_to_server` is empty, just returns `value`.
// If `forward_to_server` is not empty, it is treated as the URL of a server
// which implements this interface. The server that recieves the non-empty
// `forward_to_server` arg acts as a proxy for that other server.
// For the error variants: if should_error is true, the provided err result
// error is sent, otherwise the response variant is sent.
EchoStruct(Struct value, string forward_to_server) -> (Struct value);
EchoStructWithError(
Struct value, default_enum result_err, string forward_to_server, RespondWith result_variant)
-> (Struct value) error default_enum;
// Same as the above, but the server should use the event to return the
// response, rather than a return value.
EchoStructNoRetVal(Struct value, string forward_to_server);
-> EchoEvent(Struct value);
EchoArrays(ArraysStruct value, string forward_to_server) -> (ArraysStruct value);
EchoArraysWithError(
ArraysStruct value, default_enum result_err, string forward_to_server, RespondWith result_variant)
-> (ArraysStruct value) error default_enum;
EchoVectors(VectorsStruct value, string forward_to_server) -> (VectorsStruct value);
EchoVectorsWithError(
VectorsStruct value, default_enum result_err, string forward_to_server, RespondWith result_variant)
-> (VectorsStruct value) error default_enum;
EchoTable(AllTypesTable value, string forward_to_server) -> (AllTypesTable value);
EchoTableWithError(
AllTypesTable value, default_enum result_err, string forward_to_server, RespondWith result_variant)
-> (AllTypesTable value) error default_enum;
EchoXunions(vector<AllTypesXunion> value, string forward_to_server) -> (vector<AllTypesXunion> value);
EchoXunionsWithError(
vector<AllTypesXunion> value, default_enum result_err, string forward_to_server, RespondWith result_variant)
-> (vector<AllTypesXunion> value) error default_enum;
};