blob: fd8c9e63cff30dde4bf59b68976d8a1ad5203fb1 [file] [log] [blame]
// Copyright 2019 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 test.fidlcodec.examples;
using zx;
closed protocol Echo {
strict EchoString(struct {
value string:<100, optional>;
}) -> (struct {
response string:<100, optional>;
});
};
type Named = struct {
s string:200;
};
alias NamedAlias = Named;
alias StringAlias = string:100;
alias VectorAlias = vector<NamedAlias>:20;
alias HandleAlias = zx.Handle;
closed protocol FidlCodecTestProtocol {
strict Empty();
strict String(struct {
s string:100;
});
strict Named(Named);
strict Bool(struct {
b bool;
});
strict Int8(struct {
i8 int8;
});
strict Int16(struct {
i16 int16;
});
strict Int32(struct {
i32 int32;
});
strict Int64(struct {
i64 int64;
});
strict Uint8(struct {
ui8 uint8;
});
strict Uint16(struct {
ui16 uint16;
});
strict Uint32(struct {
ui32 uint32;
});
strict Uint64(struct {
ui64 uint64;
});
strict Float32(struct {
f32 float32;
});
strict Float64(struct {
f64 float64;
});
strict Complex(struct {
real int32;
imaginary int32;
});
strict StringInt(struct {
s string:100;
i32 int32;
});
strict StringIntTable(table {
1: s string:100;
2: i32 int32;
});
strict StringIntUnion(union {
1: s string:100;
2: i32 int32;
});
strict StructIntUnion(union {
1: structomatic struct {
s string:100;
i32 int32;
};
2: i32 int32;
});
strict Array1(struct {
b_1 array<int32, 1>;
});
strict Array2(struct {
b_2 array<int32, 2>;
});
strict Vector(struct {
v_1 vector<int32>:<10, optional>;
});
strict TwoStringArrayInt(struct {
arr array<string:100, 2>;
i32 int32;
});
strict TwoStringVectorInt(struct {
vec vector<string:100>:10;
i32 int32;
});
strict TwoStringVectors(struct {
v_1 vector<string:100>:10;
v_2 vector<string:100>:10;
});
strict VectorUint8(struct {
v vector<uint8>:100;
});
strict VectorUint32(struct {
v vector<uint32>:100;
});
strict VectorStruct(struct {
v vector<SmallStruct>:100;
});
strict ArrayStruct(struct {
a array<SmallStruct, 3>;
});
strict VectorStruct2(struct {
v vector<SmallUnevenStruct>:100;
});
strict ArrayStruct2(struct {
a array<SmallUnevenStruct, 3>;
});
strict Struct(struct {
p PrimitiveTypes;
});
strict BoolStruct(struct {
s BoolStructType;
});
strict NullableStruct(struct {
p box<PrimitiveTypes>;
});
strict NullableStructAndInt(struct {
p box<PrimitiveTypes>;
i int32;
});
strict ArrayNullableStruct(struct {
a array<box<TwoStringStruct>, 3>;
});
strict SmallStructAfterByte(struct {
u uint8;
s1 SmallStruct;
s2 SmallStruct;
});
strict TwoStringStructInt(struct {
s TwoStringStruct;
i32 int32;
});
strict TwoStringNullableStructInt(struct {
s box<TwoStringStruct>;
i32 int32;
});
strict Union(struct {
isu IntStructUnion;
i int32;
});
strict NullableUnion(struct {
isu IntStructUnion:optional;
i int32;
});
strict NullableUnionIntFirst(struct {
i int32;
isu IntStructUnion:optional;
});
strict ArrayNullableUnion(struct {
a array<IntStructUnion:optional, 3>;
});
strict XUnion(struct {
isu IntStructXunion;
i int32;
});
strict NullableXUnion(struct {
isu IntStructXunion:optional;
i int32;
});
strict NullableXUnionIntFirst(struct {
i int32;
isu IntStructXunion:optional;
});
strict ShortUnion(struct {
u U8U16Union;
i int32;
});
strict ShortUnionReserved(struct {
u U8U16UnionReserved;
i int32;
});
strict ShortXUnion(struct {
u U8U16Xunion;
i int32;
});
strict RecursiveUnion(struct {
e DataElement;
});
strict U8U16UnionStruct(struct {
s U8U16UnionStructType;
});
strict DefaultEnumMessage(struct {
ev DefaultEnum;
});
strict I8EnumMessage(struct {
ev I8Enum;
});
strict I16EnumMessage(struct {
ev I16Enum;
});
strict I32EnumMessage(struct {
ev I32Enum;
});
strict I64EnumMessage(struct {
ev I64Enum;
});
strict DefaultBitsMessage(struct {
v DefaultBits;
});
strict I8BitsMessage(struct {
v I8Bits;
});
strict I16BitsMessage(struct {
v I16Bits;
});
strict I32BitsMessage(struct {
v I32Bits;
});
strict I64BitsMessage(struct {
v I64Bits;
});
strict Table(struct {
table ValueTable;
i int32;
});
strict TableToBool(struct {
setattr ValueTable;
i int32;
}) -> (struct {
finally bool;
});
strict Handle(resource struct {
ch zx.Handle:CHANNEL;
});
strict NullableHandle(resource struct {
ch zx.Handle:<CHANNEL, optional>;
});
strict HandleStructMessage(resource struct {
hs HandleStruct;
});
strict HandleTableMessage(resource struct {
t HandleTable;
});
strict TraversalOrderMessage(resource struct {
t TraversalOrder;
});
strict TraversalMainMessage(resource struct {
v vector<box<TraversalMain>>:3;
s box<TraversalStruct>;
});
// Named ProtocolMethod because the natural bindings
// do not support a method named Protocol.
strict ProtocolMethod(resource struct {
ch client_end:ParamProtocol;
});
};
type BoolStructType = struct {
b bool;
};
type PrimitiveTypes = struct {
s string:100;
b bool;
i8 int8;
i16 int16;
i32 int32;
i64 int64;
u8 uint8;
u16 uint16;
u32 uint32;
u64 uint64;
f32 float32;
f64 float64;
};
type SmallStruct = struct {
a uint8;
b uint8;
c uint8;
};
type SmallUnevenStruct = struct {
a uint32;
b uint8;
};
type TwoStringStruct = struct {
value1 string:100;
value2 string:100;
};
type IntStructUnion = strict union {
1: variant_i int32;
2: variant_tss TwoStringStruct;
};
type IntStructXunion = flexible union {
1: variant_i int32;
2: variant_tss TwoStringStruct;
};
type U8U16Union = strict union {
1: variant_u8 uint8;
2: variant_u16 uint16;
};
type U8U16UnionReserved = strict union {
1: variant_u8 uint8;
3: variant_u16 uint16;
};
type U8U16Xunion = flexible union {
1: variant_u8 uint8;
2: variant_u16 uint16;
};
// Mostly copied from sdk/fidl/fuchsia.bluetooth.bredr/service.fidl
const MAX_SEQUENCE_LENGTH uint8 = 255;
const MAX_STRING_LENGTH uint16 = 1024;
const ALWAYS_TRUE bool = true;
const PI float32 = 3.14159265;
const BITS DefaultEnum = DefaultEnum.X;
type DataElement = strict union {
1: int8 int8;
2: int16 int16;
3: int32 int32;
4: int64 int64;
5: uint8 uint8;
6: uint16 uint16;
7: uint32 uint32;
8: uint64 uint64;
9: str string:MAX_STRING_LENGTH;
10: b bool;
11: sequence vector<DataElement:optional>:MAX_SEQUENCE_LENGTH;
12: alternatives vector<DataElement:optional>:MAX_SEQUENCE_LENGTH;
};
type U8U16UnionStructType = struct {
u U8U16Union;
};
type DefaultEnum = strict enum {
X = 23;
};
type I8Enum = strict enum : int8 {
X = -23;
};
type I16Enum = strict enum : int16 {
X = -23;
};
type I32Enum = strict enum : int32 {
X = -23;
};
type I64Enum = strict enum : int64 {
X = -23;
};
type DefaultBits = strict bits {
A = 1;
B = 2;
C = 4;
D = 8;
};
type I8Bits = strict bits : uint8 {
A = 1;
B = 2;
C = 4;
D = 8;
};
type I16Bits = strict bits : uint16 {
A = 0x100;
B = 0x200;
C = 0x400;
D = 0x800;
};
type I32Bits = strict bits : uint64 {
A = 0x10000;
B = 0x20000;
C = 0x40000;
D = 0x80000;
};
type I64Bits = strict bits : uint64 {
A = 0x100000000;
B = 0x200000000;
C = 0x400000000;
D = 0x800000000;
};
type ValueTable = table {
1: first_int16 int16;
2: second_struct TwoStringStruct;
4: third_union IntStructUnion;
};
type HandleStruct = resource struct {
h1 zx.Handle:CHANNEL;
h2 zx.Handle:CHANNEL;
h3 zx.Handle:CHANNEL;
};
type OptHandleStruct = resource struct {
sh1 zx.Handle:<CHANNEL, optional>;
sh2 zx.Handle:<CHANNEL, optional>;
};
type HandleTable = resource table {
1: h1 zx.Handle:CHANNEL;
2: s1 OptHandleStruct;
};
type TraversalOrder = resource struct {
s box<OptHandleStruct>;
h1 zx.Handle:<CHANNEL, optional>;
h2 zx.Handle:<CHANNEL, optional>;
};
type TraversalStruct = resource struct {
a uint32;
b zx.Handle:<CHANNEL, optional>;
};
type TraversalMain = resource struct {
x uint32;
y box<TraversalStruct>;
};
closed protocol ParamProtocol {
strict Method();
};