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

#include <lib/fidl/internal.h>


extern const struct FidlCodedEnum fidl_test_protocols_obj_typeTable;
extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResponseTable;
extern const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultTable;
extern const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultNullableRefTable;
extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResponseTable;
extern const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultTable;
extern const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultNullableRefTable;
extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResponseTable;
extern const struct FidlCodedEnum fidl_test_protocols_ErrorEnunTable;
extern const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultTable;
extern const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultNullableRefTable;


extern const struct FidlCodedStruct fidl_test_protocols_TransitionalRequestRequestTable;
const struct FidlCodedStruct fidl_test_protocols_TransitionalRequestRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=24u, .name="fidl.test.protocols/TransitionalRequestRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_TransitionalRequestResponseTable;
const struct FidlCodedStruct fidl_test_protocols_TransitionalRequestResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=24u, .name="fidl.test.protocols/TransitionalRequestResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_TransitionalOneWayRequestTable;
const struct FidlCodedStruct fidl_test_protocols_TransitionalOneWayRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=24u, .name="fidl.test.protocols/TransitionalOneWayRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_TransitionalEventEventTable;
const struct FidlCodedStruct fidl_test_protocols_TransitionalEventEventTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=24u, .name="fidl.test.protocols/TransitionalEventEvent"};

extern const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMethodARequestTable;
const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMethodARequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=32u, .name="fidl.test.protocols/ChannelProtocolMethodARequest"};

extern const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolEventAEventTable;
const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolEventAEventTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=32u, .name="fidl.test.protocols/ChannelProtocolEventAEvent"};

extern const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMethodBRequestTable;
const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMethodBRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=32u, .name="fidl.test.protocols/ChannelProtocolMethodBRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMethodBResponseTable;
const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMethodBResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=24u, .name="fidl.test.protocols/ChannelProtocolMethodBResponse"};

static const struct FidlCodedHandle HandlesocketnonnullableTable = {.tag=kFidlTypeHandle, .handle_subtype=ZX_OBJ_TYPE_SOCKET, .handle_rights=2147483648u, .nullable=kFidlNullability_Nonnullable};

extern const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMutateSocketRequestTable;
static const struct FidlStructElement Fields54fidl_test_protocols_ChannelProtocolMutateSocketRequest[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_Resource},.offset=16u, .field_type=(fidl_type_t*)(&HandlesocketnonnullableTable)}},
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=20u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}}
};
const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMutateSocketRequestTable = {.tag=kFidlTypeStruct, .elements=Fields54fidl_test_protocols_ChannelProtocolMutateSocketRequest, .element_count=2u, .size=24u, .name="fidl.test.protocols/ChannelProtocolMutateSocketRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMutateSocketResponseTable;
static const struct FidlStructElement Fields55fidl_test_protocols_ChannelProtocolMutateSocketResponse[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_Resource},.offset=16u, .field_type=(fidl_type_t*)(&HandlesocketnonnullableTable)}},
    /*FidlStructPadding*/{.padding=/*FidlStructPadding*/{.offset=20u, .header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Padding32,.is_resource=kFidlIsResource_NotResource},.mask_32=4294967295u}}
};
const struct FidlCodedStruct fidl_test_protocols_ChannelProtocolMutateSocketResponseTable = {.tag=kFidlTypeStruct, .elements=Fields55fidl_test_protocols_ChannelProtocolMutateSocketResponse, .element_count=2u, .size=24u, .name="fidl.test.protocols/ChannelProtocolMutateSocketResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestNoResponseRequestTable;
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestNoResponseRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithAndWithoutRequestResponseNoRequestNoResponseRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestEmptyResponseRequestTable;
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestEmptyResponseRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithAndWithoutRequestResponseNoRequestEmptyResponseRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestEmptyResponseResponseTable;
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestEmptyResponseResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithAndWithoutRequestResponseNoRequestEmptyResponseResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestWithResponseRequestTable;
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestWithResponseRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithAndWithoutRequestResponseNoRequestWithResponseRequest"};

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

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestWithResponseResponseTable;
static const struct FidlStructElement Fields78fidl_test_protocols_WithAndWithoutRequestResponseNoRequestWithResponseResponse[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&String4294967295nonnullableTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseNoRequestWithResponseResponseTable = {.tag=kFidlTypeStruct, .elements=Fields78fidl_test_protocols_WithAndWithoutRequestResponseNoRequestWithResponseResponse, .element_count=1u, .size=32u, .name="fidl.test.protocols/WithAndWithoutRequestResponseNoRequestWithResponseResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestNoResponseRequestTable;
static const struct FidlStructElement Fields77fidl_test_protocols_WithAndWithoutRequestResponseWithRequestNoResponseRequest[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&String4294967295nonnullableTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestNoResponseRequestTable = {.tag=kFidlTypeStruct, .elements=Fields77fidl_test_protocols_WithAndWithoutRequestResponseWithRequestNoResponseRequest, .element_count=1u, .size=32u, .name="fidl.test.protocols/WithAndWithoutRequestResponseWithRequestNoResponseRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestEmptyResponseRequestTable;
static const struct FidlStructElement Fields80fidl_test_protocols_WithAndWithoutRequestResponseWithRequestEmptyResponseRequest[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&String4294967295nonnullableTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestEmptyResponseRequestTable = {.tag=kFidlTypeStruct, .elements=Fields80fidl_test_protocols_WithAndWithoutRequestResponseWithRequestEmptyResponseRequest, .element_count=1u, .size=32u, .name="fidl.test.protocols/WithAndWithoutRequestResponseWithRequestEmptyResponseRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestEmptyResponseResponseTable;
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestEmptyResponseResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithAndWithoutRequestResponseWithRequestEmptyResponseResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseRequestTable;
static const struct FidlStructElement Fields79fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseRequest[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&String4294967295nonnullableTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseRequestTable = {.tag=kFidlTypeStruct, .elements=Fields79fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseRequest, .element_count=1u, .size=32u, .name="fidl.test.protocols/WithAndWithoutRequestResponseWithRequestWithResponseRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseResponseTable;
static const struct FidlStructElement Fields80fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseResponse[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&String4294967295nonnullableTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseResponseTable = {.tag=kFidlTypeStruct, .elements=Fields80fidl_test_protocols_WithAndWithoutRequestResponseWithRequestWithResponseResponse, .element_count=1u, .size=32u, .name="fidl.test.protocols/WithAndWithoutRequestResponseWithRequestWithResponseResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseOnEmptyResponseEventTable;
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseOnEmptyResponseEventTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithAndWithoutRequestResponseOnEmptyResponseEvent"};

extern const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseOnWithResponseEventTable;
static const struct FidlStructElement Fields68fidl_test_protocols_WithAndWithoutRequestResponseOnWithResponseEvent[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&String4294967295nonnullableTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithAndWithoutRequestResponseOnWithResponseEventTable = {.tag=kFidlTypeStruct, .elements=Fields68fidl_test_protocols_WithAndWithoutRequestResponseOnWithResponseEvent, .element_count=1u, .size=32u, .name="fidl.test.protocols/WithAndWithoutRequestResponseOnWithResponseEvent"};

extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxResponseAsStructRequestTable;
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxResponseAsStructRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithErrorSyntaxResponseAsStructRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxResponseAsStructResponseTable;
static const struct FidlStructElement Fields59fidl_test_protocols_WithErrorSyntaxResponseAsStructResponse[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxResponseAsStructResponseTable = {.tag=kFidlTypeStruct, .elements=Fields59fidl_test_protocols_WithErrorSyntaxResponseAsStructResponse, .element_count=1u, .size=40u, .name="fidl.test.protocols/WithErrorSyntaxResponseAsStructResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsPrimitiveRequestTable;
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsPrimitiveRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithErrorSyntaxErrorAsPrimitiveRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsPrimitiveResponseTable;
static const struct FidlStructElement Fields59fidl_test_protocols_WithErrorSyntaxErrorAsPrimitiveResponse[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsPrimitiveResponseTable = {.tag=kFidlTypeStruct, .elements=Fields59fidl_test_protocols_WithErrorSyntaxErrorAsPrimitiveResponse, .element_count=1u, .size=40u, .name="fidl.test.protocols/WithErrorSyntaxErrorAsPrimitiveResponse"};

extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsEnumRequestTable;
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsEnumRequestTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=16u, .name="fidl.test.protocols/WithErrorSyntaxErrorAsEnumRequest"};

extern const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsEnumResponseTable;
static const struct FidlStructElement Fields54fidl_test_protocols_WithErrorSyntaxErrorAsEnumResponse[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultTable)}}
};
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntaxErrorAsEnumResponseTable = {.tag=kFidlTypeStruct, .elements=Fields54fidl_test_protocols_WithErrorSyntaxErrorAsEnumResponse, .element_count=1u, .size=40u, .name="fidl.test.protocols/WithErrorSyntaxErrorAsEnumResponse"};


static bool EnumValidatorFor_fidl_test_protocols_obj_type(uint64_t v) {
  switch (v) {
    case 0ul:
    case 14ul:
      return true;
    default:
      return false;
  }
}

const struct FidlCodedEnum fidl_test_protocols_obj_typeTable = {.tag=kFidlTypeEnum, .underlying_type=kFidlCodedPrimitiveSubtype_Uint32, .strictness=kFidlStrictness_Strict, .validate=&EnumValidatorFor_fidl_test_protocols_obj_type, .name="fidl.test.protocols/obj_type"};

const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=24u, .name="fidl.test.protocols/WithErrorSyntax_ResponseAsStruct_Response"};

static const struct FidlXUnionField Fields59fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_Result[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResponseTable)},
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_internal_kUint32Table)}
};
const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultTable = {.tag=kFidlTypeXUnion, .field_count=2u, .fields=Fields59fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_Result, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.protocols/WithErrorSyntax_ResponseAsStruct_Result", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_Resource};
static const struct FidlXUnionField Fields70fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultNullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResponseTable)},
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_internal_kUint32Table)}
};
const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultNullableRefTable = {.tag=kFidlTypeXUnion, .field_count=2u, .fields=Fields70fidl_test_protocols_WithErrorSyntax_ResponseAsStruct_ResultNullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.protocols/WithErrorSyntax_ResponseAsStruct_Result", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_Resource};
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=1u, .name="fidl.test.protocols/WithErrorSyntax_ErrorAsPrimitive_Response"};

static const struct FidlXUnionField Fields59fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_Result[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResponseTable)},
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_internal_kUint32Table)}
};
const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultTable = {.tag=kFidlTypeXUnion, .field_count=2u, .fields=Fields59fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_Result, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.protocols/WithErrorSyntax_ErrorAsPrimitive_Result", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_Resource};
static const struct FidlXUnionField Fields70fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultNullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResponseTable)},
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_internal_kUint32Table)}
};
const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultNullableRefTable = {.tag=kFidlTypeXUnion, .field_count=2u, .fields=Fields70fidl_test_protocols_WithErrorSyntax_ErrorAsPrimitive_ResultNullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.protocols/WithErrorSyntax_ErrorAsPrimitive_Result", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_Resource};
const struct FidlCodedStruct fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResponseTable = {.tag=kFidlTypeStruct, .elements=NULL, .element_count=0u, .size=1u, .name="fidl.test.protocols/WithErrorSyntax_ErrorAsEnum_Response"};

static bool EnumValidatorFor_fidl_test_protocols_ErrorEnun(uint64_t v) {
  switch (v) {
    case 1ul:
    case 2ul:
      return true;
    default:
      return false;
  }
}

const struct FidlCodedEnum fidl_test_protocols_ErrorEnunTable = {.tag=kFidlTypeEnum, .underlying_type=kFidlCodedPrimitiveSubtype_Uint32, .strictness=kFidlStrictness_Strict, .validate=&EnumValidatorFor_fidl_test_protocols_ErrorEnun, .name="fidl.test.protocols/ErrorEnun"};

static const struct FidlXUnionField Fields54fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_Result[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResponseTable)},
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_ErrorEnunTable)}
};
const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultTable = {.tag=kFidlTypeXUnion, .field_count=2u, .fields=Fields54fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_Result, .nullable=kFidlNullability_Nonnullable, .name="fidl.test.protocols/WithErrorSyntax_ErrorAsEnum_Result", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_Resource};
static const struct FidlXUnionField Fields65fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultNullableRef[] = {
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResponseTable)},
    /*FidlXUnionField*/{.type=(fidl_type_t*)(&fidl_test_protocols_ErrorEnunTable)}
};
const struct FidlCodedXUnion fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultNullableRefTable = {.tag=kFidlTypeXUnion, .field_count=2u, .fields=Fields65fidl_test_protocols_WithErrorSyntax_ErrorAsEnum_ResultNullableRef, .nullable=kFidlNullability_Nullable, .name="fidl.test.protocols/WithErrorSyntax_ErrorAsEnum_Result", .strictness=kFidlStrictness_Strict, .is_resource=kFidlIsResource_Resource};
