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

// fidl_experiment = output_index_json

#include <lib/fidl/internal.h>

const struct FidlCodedStruct test_protocolpayloads_MainProtocol_TwoWayAnonWithError_ResponseTable;
extern const struct FidlCodedStruct test_protocolpayloads_imported_ImportStructPayloadTable;
const struct FidlCodedStruct test_protocolpayloads_LocalStructPayloadTable;

const struct FidlCodedStruct test_protocolpayloads_LocalStructPayloadTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/LocalStructPayload",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_protocolpayloads_MainProtocolOnAnonRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/MainProtocolOnAnonRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_protocolpayloads_MainProtocolOneWayAnonRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/MainProtocolOneWayAnonRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_protocolpayloads_MainProtocolTwoWayAnonRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/MainProtocolTwoWayAnonRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_protocolpayloads_MainProtocolTwoWayAnonResponseTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/MainProtocolTwoWayAnonResponse",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_protocolpayloads_MainProtocolTwoWayAnonWithErrorRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/MainProtocolTwoWayAnonWithErrorRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

const struct FidlCodedStruct test_protocolpayloads_MainProtocol_TwoWayAnonWithError_ResponseTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolpayloads/MainProtocol_TwoWayAnonWithError_Response",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

static const struct FidlUnionField Fields61test_protocolpayloads_MainProtocol_TwoWayAnonWithError_Result[] = {
    {.type = (const fidl_type_t*)&test_protocolpayloads_MainProtocol_TwoWayAnonWithError_ResponseTable},
    {.type = (const fidl_type_t*)&fidl_internal_kUint32Table},
};
const struct FidlCodedUnion test_protocolpayloads_MainProtocol_TwoWayAnonWithError_ResultTable = {
    .tag = kFidlTypeUnion,
    .name = "test.protocolpayloads/MainProtocol_TwoWayAnonWithError_Result",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields61test_protocolpayloads_MainProtocol_TwoWayAnonWithError_Result,
    .field_count = 2,
};
const struct FidlCodedUnion test_protocolpayloads_MainProtocol_TwoWayAnonWithError_ResultNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.protocolpayloads/MainProtocol_TwoWayAnonWithError_Result",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields61test_protocolpayloads_MainProtocol_TwoWayAnonWithError_Result,
    .field_count = 2,
};

static const struct FidlUnionField Fields63test_protocolpayloads_MainProtocol_TwoWayImportWithError_Result[] = {
    {.type = (const fidl_type_t*)&test_protocolpayloads_imported_ImportStructPayloadTable},
    {.type = (const fidl_type_t*)&fidl_internal_kUint32Table},
};
const struct FidlCodedUnion test_protocolpayloads_MainProtocol_TwoWayImportWithError_ResultTable = {
    .tag = kFidlTypeUnion,
    .name = "test.protocolpayloads/MainProtocol_TwoWayImportWithError_Result",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields63test_protocolpayloads_MainProtocol_TwoWayImportWithError_Result,
    .field_count = 2,
};
const struct FidlCodedUnion test_protocolpayloads_MainProtocol_TwoWayImportWithError_ResultNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.protocolpayloads/MainProtocol_TwoWayImportWithError_Result",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields63test_protocolpayloads_MainProtocol_TwoWayImportWithError_Result,
    .field_count = 2,
};

static const struct FidlUnionField Fields62test_protocolpayloads_MainProtocol_TwoWayLocalWithError_Result[] = {
    {.type = (const fidl_type_t*)&test_protocolpayloads_LocalStructPayloadTable},
    {.type = (const fidl_type_t*)&fidl_internal_kUint32Table},
};
const struct FidlCodedUnion test_protocolpayloads_MainProtocol_TwoWayLocalWithError_ResultTable = {
    .tag = kFidlTypeUnion,
    .name = "test.protocolpayloads/MainProtocol_TwoWayLocalWithError_Result",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nonnullable,
    .fields = Fields62test_protocolpayloads_MainProtocol_TwoWayLocalWithError_Result,
    .field_count = 2,
};
const struct FidlCodedUnion test_protocolpayloads_MainProtocol_TwoWayLocalWithError_ResultNullableRefTable = {
    .tag = kFidlTypeUnion,
    .name = "test.protocolpayloads/MainProtocol_TwoWayLocalWithError_Result",
    .strictness = kFidlStrictness_Strict,
    .is_resource = kFidlIsResource_NotResource,
    .nullable = kFidlNullability_Nullable,
    .fields = Fields62test_protocolpayloads_MainProtocol_TwoWayLocalWithError_Result,
    .field_count = 2,
};
