blob: 97deb89e92ab42398e03ab81da68916d1c1ae724 [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 fidl.test.example.codingtables;
using fidl.test.example.codingtablesdeps as deplib;
type SomeStruct = struct {
foo bool;
bar int32;
};
// Tested in StructWithSomeFieldsRemoved.
// All fields in this struct don't have actions in coding tables.
type StructWithAllFieldsRemovedFromCodingTables = struct {
a int8;
b int8;
c int16;
};
// Tested in StructWithSomeFieldsRemoved.
type StructWithPadding = struct {
a int8;
c int64;
};
type PaddingAtEndStruct = struct {
a uint16;
b uint8;
};
// Some fields in this struct should be removed from coding tables because
// they have no action and the walker can skip over them.
type StructWithSomeFieldsRemovedFromCodingTables = struct {
padding_struct StructWithPadding; // not removed
// PaddingAtEndStruct contains 3 bytes with 1 final byte of padding
// When the struct is flattened, this becomes 5 bytes of padding.
padding_at_end_struct PaddingAtEndStruct;
reset_alignment uint64;
foo int8; // removed
// 1 bytes padding.
arr array<StructWithAllFieldsRemovedFromCodingTables, 1>; // removed
bool_array array<bool, 1>; // not removed
// 1 byte padding.
bar uint16; // removed
};
type MyXUnion = flexible union {
1: foo bool;
2: bar int32;
};
type MyStrictXUnion = strict union {
1: foo bool;
2: bar int32;
};
type MyTable = table {
1: foo bool;
2: bar int32;
4: baz array<uint64, 42>;
5: qux vector<uint64>:42;
};
type MyBits = strict bits : uint8 {
HELLO = 0x1;
WORLD = 0x10;
};
type MyEnum = strict enum : uint32 {
FOO = 1;
BAR = 42;
};
// Types defined to detect collisions in the mangled coding table output.
type A = struct {};
type A1 = struct {};
type NumberCollision = struct {
a array<A, 11>;
b array<A1, 1>;
c vector<A>:11;
d vector<A1>:1;
e string:11;
f string:1;
};
// fidlc will only expose coding tables for message types.
// However, we can obtain the coding tables for SomeStruct/MyXUnion etc. via the coding table
// for request message types, by defining dummy methods which take a single desired argument.
closed protocol Coding {
strict SomeStruct(struct {
s SomeStruct;
});
strict StructWithSomeFieldsRemovedFromCodingTables(struct {
s StructWithSomeFieldsRemovedFromCodingTables;
});
// Various trickery to avoid directly refering a xunion/table inline,
// which is not supported in the C bindings.
strict MyXUnion(struct {
x MyXUnion:optional;
});
strict MyStrictXUnion(struct {
x MyStrictXUnion:optional;
});
// Ensuring support for multiple uses of the same nullable type.
strict MyXUnion2(struct {
x MyXUnion:optional;
});
strict MyStrictXUnion2(struct {
x MyStrictXUnion:optional;
});
strict VectorOfMyTable(struct {
t vector<MyTable>;
});
strict VectorOfMyXUnion(struct {
x vector<MyXUnion>;
});
strict VectorOfMyStrictXUnion(struct {
x vector<MyStrictXUnion>;
});
strict MyBits(struct {
b MyBits;
});
strict MyEnum(struct {
e MyEnum;
});
strict NumberCollision(struct {
x NumberCollision;
});
strict ForeignXUnions(struct {
tx deplib.MyXUnionA;
}) -> (struct {
rx deplib.MyXUnionA:optional;
});
};