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

#include <lib/fidl/internal.h>


extern const struct FidlCodedEnum values_EnumTypeTable;
extern const struct FidlCodedEnum values_EnumTable;
extern const struct FidlCodedBits values_BitsTypeTable;
extern const struct FidlCodedBits values_BitsTable;
extern const struct FidlCodedStruct values_StructTable;


static const struct FidlCodedString String4294967295nonnullableTable = {.tag=kFidlTypeString, .max_size=4294967295u, .nullable=kFidlNullability_Nonnullable};


static bool EnumValidatorFor_values_EnumType(uint64_t v) { return (v == 1ul) || false; }
const struct FidlCodedEnum values_EnumTypeTable = {.tag=kFidlTypeEnum, .underlying_type=kFidlCodedPrimitiveSubtype_Int32, .validate=&EnumValidatorFor_values_EnumType, .name="values/EnumType"};

static bool EnumValidatorFor_values_Enum(uint64_t v) { return (v == 170ul) || false; }
const struct FidlCodedEnum values_EnumTable = {.tag=kFidlTypeEnum, .underlying_type=kFidlCodedPrimitiveSubtype_Uint32, .validate=&EnumValidatorFor_values_Enum, .name="values/Enum"};

const struct FidlCodedBits values_BitsTypeTable = {.tag=kFidlTypeBits, .underlying_type=kFidlCodedPrimitiveSubtype_Uint32, .mask=131ul, .name="values/BitsType"};

const struct FidlCodedBits values_BitsTable = {.tag=kFidlTypeBits, .underlying_type=kFidlCodedPrimitiveSubtype_Uint32, .mask=8ul, .name="values/Bits"};

static const struct FidlStructField Fields13values_Struct[] = {
    /*FidlStructField*/{.type=(fidl_type_t*)(&String4294967295nonnullableTable), .offset=8u, .padding=0u},
    /*FidlStructField*/{.type=(fidl_type_t*)(&fidl_internal_kBoolTable), .offset=24u, .padding=3u},
    /*FidlStructField*/{.type=(fidl_type_t*)(&values_EnumTable), .offset=28u, .padding=0u},
    /*FidlStructField*/{.type=(fidl_type_t*)(&values_BitsTable), .offset=32u, .padding=4u}
};
const struct FidlCodedStruct values_StructTable = {.tag=kFidlTypeStruct, .fields=Fields13values_Struct, .field_count=4u, .size=40u, .name="values/Struct"};

