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

// fidl_experiment = output_index_json

#include <lib/fidl/internal.h>

static const struct FidlCodedArray Array100_21fidl_internal_kUint32Table;
static const struct FidlCodedArray Array2_21fidl_internal_kUint32Table;

const struct FidlCodedStruct test_arrays_StructLargeArrayTable = {
    .tag = kFidlTypeStruct,
    .name = "test.arrays/StructLargeArray",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 400,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_arrays_StructSmallArrayTable = {
    .tag = kFidlTypeStruct,
    .name = "test.arrays/StructSmallArray",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

static const struct FidlTableField Fields27test_arrays_TableLargeArray[] = {
    {.ordinal = 1, .type = (const fidl_type_t*)&Array100_21fidl_internal_kUint32Table},
};
const struct FidlCodedTable test_arrays_TableLargeArrayTable = {
    .tag = kFidlTypeTable,
    .name = "test.arrays/TableLargeArray",
    .is_resource = kFidlIsResource_NotResource,
    .fields = Fields27test_arrays_TableLargeArray,
    .field_count = 1,
};

static const struct FidlTableField Fields27test_arrays_TableSmallArray[] = {
    {.ordinal = 1, .type = (const fidl_type_t*)&Array2_21fidl_internal_kUint32Table},
};
const struct FidlCodedTable test_arrays_TableSmallArrayTable = {
    .tag = kFidlTypeTable,
    .name = "test.arrays/TableSmallArray",
    .is_resource = kFidlIsResource_NotResource,
    .fields = Fields27test_arrays_TableSmallArray,
    .field_count = 1,
};

static const struct FidlUnionField Fields27test_arrays_UnionLargeArray[] = {
    {.type = (const fidl_type_t*)&Array100_21fidl_internal_kUint32Table},
};
const struct FidlCodedUnion test_arrays_UnionLargeArrayTable = {
    .tag = kFidlTypeUnion,
    .name = "test.arrays/UnionLargeArray",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields27test_arrays_UnionLargeArray,
    .field_count = 1,
};
const struct FidlCodedUnion test_arrays_UnionLargeArrayNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.arrays/UnionLargeArray",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields27test_arrays_UnionLargeArray,
    .field_count = 1,
};

static const struct FidlUnionField Fields27test_arrays_UnionSmallArray[] = {
    {.type = (const fidl_type_t*)&Array2_21fidl_internal_kUint32Table},
};
const struct FidlCodedUnion test_arrays_UnionSmallArrayTable = {
    .tag = kFidlTypeUnion,
    .name = "test.arrays/UnionSmallArray",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields27test_arrays_UnionSmallArray,
    .field_count = 1,
};
const struct FidlCodedUnion test_arrays_UnionSmallArrayNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.arrays/UnionSmallArray",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields27test_arrays_UnionSmallArray,
    .field_count = 1,
};

static const struct FidlCodedArray Array100_21fidl_internal_kUint32Table = {
    .tag = kFidlTypeArray,
    .element = (const fidl_type_t*)&fidl_internal_kUint32Table,
    .array_size_v2 = 400,
    .element_size_v2 = 4,
};

static const struct FidlCodedArray Array2_21fidl_internal_kUint32Table = {
    .tag = kFidlTypeArray,
    .element = (const fidl_type_t*)&fidl_internal_kUint32Table,
    .array_size_v2 = 8,
    .element_size_v2 = 4,
};
