// WARNING: This file is machine generated by fidlc.

#include <lib/fidl/internal.h>


extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize8Alignment4Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize8Alignment4NullableRefTable;
extern const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize8Alignment4Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize36Alignment4Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize36Alignment4NullableRefTable;
extern const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize36Alignment4Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize12Alignment4Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize12Alignment4NullableRefTable;
extern const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize12Alignment4Table;
extern const struct FidlCodedStruct fidl_test_unionsandwich_StructSize16Alignment8Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize24Alignment8Table;
extern const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize24Alignment8NullableRefTable;
extern const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize24Alignment8Table;


static const struct FidlCodedArray Array32_5uint8Table __attribute__((unused)) = {.tag=kFidlTypeArray, .element=(fidl_type_t*)(&fidl_internal_kUint8Table), .array_size=32u, .element_size=1u};

static const struct FidlCodedArray Array6_5uint8Table __attribute__((unused)) = {.tag=kFidlTypeArray, .element=(fidl_type_t*)(&fidl_internal_kUint8Table), .array_size=6u, .element_size=1u};


static const struct FidlXUnionField Fields44fidl_test_unionsandwich_UnionSize8Alignment4[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_internal_kUint32Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize8Alignment4Table = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields44fidl_test_unionsandwich_UnionSize8Alignment4, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.unionsandwich/UnionSize8Alignment4", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlXUnionField Fields55fidl_test_unionsandwich_UnionSize8Alignment4NullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_internal_kUint32Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize8Alignment4NullableRefTable = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields55fidl_test_unionsandwich_UnionSize8Alignment4NullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.unionsandwich/UnionSize8Alignment4", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlStructElement Fields52fidl_test_unionsandwich_SandwichUnionSize8Alignment4[] = {
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=4u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}},
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=8u, .field_type=(fidl_type_t*)(&fidl_test_unionsandwich_UnionSize8Alignment4Table)}},
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=36u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}}
};
const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize8Alignment4Table = {.tag=kFidlTypeStruct, .elements=Fields52fidl_test_unionsandwich_SandwichUnionSize8Alignment4, .element_count=3u, .size=40u, .name="fidl.test.unionsandwich/SandwichUnionSize8Alignment4"};

static const struct FidlXUnionField Fields45fidl_test_unionsandwich_UnionSize36Alignment4[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&Array32_5uint8Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize36Alignment4Table = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields45fidl_test_unionsandwich_UnionSize36Alignment4, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.unionsandwich/UnionSize36Alignment4", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlXUnionField Fields56fidl_test_unionsandwich_UnionSize36Alignment4NullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&Array32_5uint8Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize36Alignment4NullableRefTable = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields56fidl_test_unionsandwich_UnionSize36Alignment4NullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.unionsandwich/UnionSize36Alignment4", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlStructElement Fields53fidl_test_unionsandwich_SandwichUnionSize36Alignment4[] = {
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=4u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}},
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=8u, .field_type=(fidl_type_t*)(&fidl_test_unionsandwich_UnionSize36Alignment4Table)}},
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=36u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}}
};
const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize36Alignment4Table = {.tag=kFidlTypeStruct, .elements=Fields53fidl_test_unionsandwich_SandwichUnionSize36Alignment4, .element_count=3u, .size=40u, .name="fidl.test.unionsandwich/SandwichUnionSize36Alignment4"};

static const struct FidlXUnionField Fields45fidl_test_unionsandwich_UnionSize12Alignment4[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&Array6_5uint8Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize12Alignment4Table = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields45fidl_test_unionsandwich_UnionSize12Alignment4, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.unionsandwich/UnionSize12Alignment4", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlXUnionField Fields56fidl_test_unionsandwich_UnionSize12Alignment4NullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&Array6_5uint8Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize12Alignment4NullableRefTable = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields56fidl_test_unionsandwich_UnionSize12Alignment4NullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.unionsandwich/UnionSize12Alignment4", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlStructElement Fields53fidl_test_unionsandwich_SandwichUnionSize12Alignment4[] = {
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=4u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}},
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=8u, .field_type=(fidl_type_t*)(&fidl_test_unionsandwich_UnionSize12Alignment4Table)}},
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=36u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}}
};
const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize12Alignment4Table = {.tag=kFidlTypeStruct, .elements=Fields53fidl_test_unionsandwich_SandwichUnionSize12Alignment4, .element_count=3u, .size=40u, .name="fidl.test.unionsandwich/SandwichUnionSize12Alignment4"};

const struct FidlCodedStruct fidl_test_unionsandwich_StructSize16Alignment8Table = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.unionsandwich/StructSize16Alignment8"};

static const struct FidlXUnionField Fields45fidl_test_unionsandwich_UnionSize24Alignment8[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_unionsandwich_StructSize16Alignment8Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize24Alignment8Table = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields45fidl_test_unionsandwich_UnionSize24Alignment8, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.unionsandwich/UnionSize24Alignment8", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlXUnionField Fields56fidl_test_unionsandwich_UnionSize24Alignment8NullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_unionsandwich_StructSize16Alignment8Table)}
};
const struct FidlCodedXUnion fidl_test_unionsandwich_UnionSize24Alignment8NullableRefTable = {.tag=kFidlTypeXUnion, .field_count=1u, .fields=Fields56fidl_test_unionsandwich_UnionSize24Alignment8NullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.unionsandwich/UnionSize24Alignment8", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_NotResource};
static const struct FidlStructElement Fields53fidl_test_unionsandwich_SandwichUnionSize24Alignment8[] = {
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=4u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}},
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=8u, .field_type=(fidl_type_t*)(&fidl_test_unionsandwich_UnionSize24Alignment8Table)}},
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=36u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}}
};
const struct FidlCodedStruct fidl_test_unionsandwich_SandwichUnionSize24Alignment8Table = {.tag=kFidlTypeStruct, .elements=Fields53fidl_test_unionsandwich_SandwichUnionSize24Alignment8, .element_count=3u, .size=40u, .name="fidl.test.unionsandwich/SandwichUnionSize24Alignment8"};

