// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library conformance;

table SimpleTable {
    1: int64 x;
    2: reserved;
    3: reserved;
    4: reserved;
    5: int64 y;
};

struct StructOfSimpleTable {
    SimpleTable table;
};

resource table SimpleResourceTable {
    1: int64 x;
    2: reserved;
    3: reserved;
    4: reserved;
    5: int64 y;
};

resource struct StructOfSimpleResourceTable {
    SimpleResourceTable table;
};

struct SimpleTableThenUint64 {
    SimpleTable table;
    uint64 number;
};

table TableWithStringAndVector {
    1: string foo;
    2: int32 bar;
    3: vector<uint8> baz;
};

struct StructOfTableWithStringAndVector {
    TableWithStringAndVector table;
};

table ReverseOrdinalTable {
    4: int64 x;
    3: reserved;
    2: int64 y;
    1: int64 z;
};

struct StructOfReverseOrdinalTable {
    ReverseOrdinalTable table;
};
