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

// fidl_experiment = output_index_json

#include <lib/fidl/internal.h>

static const struct FidlCodedString StringunboundednotnullableTable;

static const struct FidlStructElement Fields32test_inheritance_SuperFooRequest[] = {
    {
        .field = {
            .header = {
                .element_type = kFidlStructElementType_Field,
                .is_resource = kFidlIsResource_NotResource,
            },
            .offset_v2 = 0,
            .field_type = (const fidl_type_t*)&StringunboundednotnullableTable,
        },
    },
};
const struct FidlCodedStruct test_inheritance_SuperFooRequestTable = {
    .tag = kFidlTypeStruct,
    .name = "test.inheritance/SuperFooRequest",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 16,
    .elements = Fields32test_inheritance_SuperFooRequest,
    .element_count = 1,
};

const struct FidlCodedStruct test_inheritance_SuperFooResponseTable = {
    .tag = kFidlTypeStruct,
    .name = "test.inheritance/SuperFooResponse",
    .is_empty = kFidlEmpty_IsNotEmpty,
    .size_v2 = 8,
    .elements = NULL,
    .element_count = 0,
};

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