// Copyright 2020 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 example;

struct OneStringOfMaxLengthFive {
    string:5 the_string;
};

struct StructOnlyPrimitives {
    int32 i;
    bool b;
    uint16 u;
};

table TableOnlyPrimitives {
    1: int32 i;
    2: bool b;
    3: uint16 u;
};

flexible union UnionOnlyPrimitives {
    1: int32 i;
    2: bool b;
    3: uint16 u;
};

flexible union UnionWithTableStructString {
    1: StructOnlyPrimitives struct;
    2: TableOnlyPrimitives table;
    3: UnionOnlyPrimitives union;
};
