blob: 9ef6eea26347c429a11bee7bc9a205bd0784e1d3 [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 {
string s;
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<debuglog> log_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;
};
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;
structs structs;
unions unions;
bool b;
};
[Discoverable]
interface 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.
1: EchoStruct(Struct value, string forward_to_server) -> (Struct value);
// Same as the above, but the server should use the event to return the
// response, rather than a return value.
2: EchoStructNoRetVal(Struct value, string forward_to_server);
3: -> EchoEvent(Struct value);
};