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

// fidl_experiment = output_index_json

#include <lib/fidl/internal.h>

static const struct FidlCodedHandle Request0notnullableTable;
static const struct FidlCodedHandle Protocol26test_protocolrequest_ChildnotnullableTable;

static const struct FidlStructElement Fields50test_protocolrequest_ParentGetChildRequestResponse[] = {
    {
        .field = {
            .header = {
                .element_type = kFidlStructElementType_Field,
                .is_resource = kFidlIsResource_Resource,
            },
            .offset_v2 = 0,
            .field_type = (const fidl_type_t*)&Request0notnullableTable,
        },
    },
};
const struct FidlCodedStruct test_protocolrequest_ParentGetChildRequestResponseTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolrequest/ParentGetChildRequestResponse",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 4,
    .elements = Fields50test_protocolrequest_ParentGetChildRequestResponse,
    .element_count = 1,
};

static const struct FidlStructElement Fields43test_protocolrequest_ParentGetChildResponse[] = {
    {
        .field = {
            .header = {
                .element_type = kFidlStructElementType_Field,
                .is_resource = kFidlIsResource_Resource,
            },
            .offset_v2 = 0,
            .field_type = (const fidl_type_t*)&Protocol26test_protocolrequest_ChildnotnullableTable,
        },
    },
};
const struct FidlCodedStruct test_protocolrequest_ParentGetChildResponseTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolrequest/ParentGetChildResponse",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 4,
    .elements = Fields43test_protocolrequest_ParentGetChildResponse,
    .element_count = 1,
};

static const struct FidlStructElement Fields43test_protocolrequest_ParentTakeChildRequest[] = {
    {
        .field = {
            .header = {
                .element_type = kFidlStructElementType_Field,
                .is_resource = kFidlIsResource_Resource,
            },
            .offset_v2 = 0,
            .field_type = (const fidl_type_t*)&Protocol26test_protocolrequest_ChildnotnullableTable,
        },
    },
};
const struct FidlCodedStruct test_protocolrequest_ParentTakeChildRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolrequest/ParentTakeChildRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 4,
    .elements = Fields43test_protocolrequest_ParentTakeChildRequest,
    .element_count = 1,
};

static const struct FidlStructElement Fields50test_protocolrequest_ParentTakeChildRequestRequest[] = {
    {
        .field = {
            .header = {
                .element_type = kFidlStructElementType_Field,
                .is_resource = kFidlIsResource_Resource,
            },
            .offset_v2 = 0,
            .field_type = (const fidl_type_t*)&Request0notnullableTable,
        },
    },
};
const struct FidlCodedStruct test_protocolrequest_ParentTakeChildRequestRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.protocolrequest/ParentTakeChildRequestRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 4,
    .elements = Fields50test_protocolrequest_ParentTakeChildRequestRequest,
    .element_count = 1,
};

static const struct FidlCodedHandle Request0notnullableTable = {
    .tag = kFidlTypeHandle,
    .handle_subtype = ZX_OBJ_TYPE_CHANNEL,
    .handle_rights = ZX_DEFAULT_CHANNEL_RIGHTS,
    .nullable = kFidlNullability_Nonnullable,
};

static const struct FidlCodedHandle Protocol26test_protocolrequest_ChildnotnullableTable = {
    .tag = kFidlTypeHandle,
    .handle_subtype = ZX_OBJ_TYPE_CHANNEL,
    .handle_rights = ZX_DEFAULT_CHANNEL_RIGHTS,
    .nullable = kFidlNullability_Nonnullable,
};
