blob: 621bbe8fa2d72f330e69ad0295835c81fcc5f557 [file] [log] [blame]
library fidl.test.union;
struct Pizza {
vector<string:16> toppings;
};
struct Pasta {
string:16 sauce;
};
union PizzaOrPasta {
1: Pizza pizza;
2: Pasta pasta;
};
union ExplicitPizzaOrPasta {
3: reserved;
2: reserved;
1: Pizza pizza;
4: Pasta pasta;
};
flexible union FlexiblePizzaOrPasta {
1: Pizza pizza;
2: Pasta pasta;
};
union StrictPizzaOrPasta {
1: Pizza pizza;
2: Pasta pasta;
};
union Union {
1: int32 Primitive;
2: string StringNeedsConstructor;
3: vector<string> VectorStringAlsoNeedsConstructor;
};
flexible union FlexibleUnion {
1: int32 Primitive;
2: string StringNeedsConstructor;
3: vector<string> VectorStringAlsoNeedsConstructor;
};
union StrictUnion {
1: int32 Primitive;
2: string StringNeedsConstructor;
3: vector<string> VectorStringAlsoNeedsConstructor;
};
union FieldCollision {
1: int32 field_collision_tag;
};
union ExplicitUnion {
2: reserved;
1: int32 Primitive;
3: string StringNeedsConstructor;
};
union ReverseOrdinalUnion {
2: uint32 second;
1: uint32 first;
};
struct NullableUnionStruct {
Union? the_union;
};
flexible union FlexibleFoo {
1: string s;
2: int32 i;
};
strict union StrictFoo {
1: string s;
2: int32 i;
};
flexible union ExplicitFoo {
2: string s;
1: int32 i;
3: reserved;
};
strict union ExplicitStrictFoo {
1: reserved;
3: string s;
2: int32 i;
};
flexible union OlderSimpleUnion {
1: int64 i;
2: float32 f;
};
flexible union NewerSimpleUnion {
// float f; // removed
1: int64 i; // unchanged
2: string s; // added
3: vector<string> v; // added
};
// 1. This xunion is currently unused by code, and for tracking changes in the goldens only.
// 2. There's no FlexibleSimpleXUnion, since that's covered by OlderSimpleUnion above.
strict union StrictSimpleXUnion {
1: int32 i;
2: float32 f;
3: string s;
};
struct Empty {
};
flexible union XUnionContainingEmptyStruct {
// This is a test to prevent regressions for fxbug.dev/8084. Note that we need fxbug.dev/8080 to be resolved
// to ensure this actually works, since goldens aren't currently compiled.
1: Empty empty;
};
strict union StrictBoundedXUnion {
1: vector<uint8>:10 v;
};
protocol TestProtocol {
StrictXUnionHenceResponseMayBeStackAllocated() -> (StrictBoundedXUnion xu);
FlexibleXUnionHenceResponseMustBeHeapAllocated() -> (OlderSimpleUnion xu);
};
struct StructWithNullableXUnion {
OlderSimpleUnion? x1;
};
flexible union ExplicitXUnion {
3: reserved;
2: reserved;
1: int64 i;
4: float32 f;
};