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

// fidl_experiment = output_index_json

#include <lib/fidl/internal.h>

const struct FidlCodedBits test_doccomments_MyFlexibleBitsTable = {
    .tag = kFidlTypeBits,
    .name = "test.doccomments/MyFlexibleBits",
    .underlying_type = kFidlCodedPrimitiveSubtype_Uint32,
    .strictness = kFidlStrictness_Flexible,
    .mask = 0x3,
};

const struct FidlCodedBits test_doccomments_MyStrictBitsTable = {
    .tag = kFidlTypeBits,
    .name = "test.doccomments/MyStrictBits",
    .underlying_type = kFidlCodedPrimitiveSubtype_Uint32,
    .strictness = kFidlStrictness_Strict,
    .mask = 0x3,
};

const struct FidlCodedEnum test_doccomments_MyFlexibleEnumTable = {
    .tag = kFidlTypeEnum,
    .name = "test.doccomments/MyFlexibleEnum",
    .underlying_type = kFidlCodedPrimitiveSubtype_Uint32,
    .strictness = kFidlStrictness_Flexible,
    .validate = NULL,
};

static bool EnumValidatorFor_test_doccomments_MyStrictEnum(uint64_t v) {
  switch (v) {
    case 1u:
    case 2u:
      return true;
    default:
      return false;
  }
}
const struct FidlCodedEnum test_doccomments_MyStrictEnumTable = {
    .tag = kFidlTypeEnum,
    .name = "test.doccomments/MyStrictEnum",
    .underlying_type = kFidlCodedPrimitiveSubtype_Uint32,
    .strictness = kFidlStrictness_Strict,
    .validate = EnumValidatorFor_test_doccomments_MyStrictEnum,
};

const struct FidlCodedStruct test_doccomments_StructTable = {
    .tag = kFidlTypeStruct,
    .name = "test.doccomments/Struct",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 4,
    .elements = NULL,
    .element_count = 0,
};

static const struct FidlTableField Fields22test_doccomments_Table[] = {
    {.ordinal = 1, .type = (const fidl_type_t*)&fidl_internal_kInt32Table},
};
const struct FidlCodedTable test_doccomments_TableTable = {
    .tag = kFidlTypeTable,
    .name = "test.doccomments/Table",
    .is_resource = kFidlIsResource_NotResource,
    .fields = Fields22test_doccomments_Table,
    .field_count = 1,
};

static const struct FidlUnionField Fields30test_doccomments_FlexibleUnion[] = {
    {.type = (const fidl_type_t*)&fidl_internal_kInt32Table},
};
const struct FidlCodedUnion test_doccomments_FlexibleUnionTable = {
    .tag = kFidlTypeUnion,
    .name = "test.doccomments/FlexibleUnion",
    .strictness = kFidlStrictness_Flexible,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields30test_doccomments_FlexibleUnion,
    .field_count = 1,
};
const struct FidlCodedUnion test_doccomments_FlexibleUnionNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.doccomments/FlexibleUnion",
    .strictness = kFidlStrictness_Flexible,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields30test_doccomments_FlexibleUnion,
    .field_count = 1,
};

static const struct FidlUnionField Fields28test_doccomments_StrictUnion[] = {
    {.type = (const fidl_type_t*)&fidl_internal_kInt32Table},
};
const struct FidlCodedUnion test_doccomments_StrictUnionTable = {
    .tag = kFidlTypeUnion,
    .name = "test.doccomments/StrictUnion",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields28test_doccomments_StrictUnion,
    .field_count = 1,
};
const struct FidlCodedUnion test_doccomments_StrictUnionNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.doccomments/StrictUnion",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields28test_doccomments_StrictUnion,
    .field_count = 1,
};
