// 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 conformance;

struct RecursiveOptionalStruct {
    RecursiveOptionalStruct? inner;
};

// Wrap with an extra layer of struct and array which should not add any more
// out of line recursion depth.
struct RecursiveOptionalStructArrayWrapper {
    array<RecursiveOptionalStruct>:1 arr;
};

union RecursiveOptionalAndUnion {
    1: RecursiveOptionalStruct recursive_optional;
};

struct RecursiveOptionalAndUnionStruct {
    RecursiveOptionalAndUnion u;
};

table RecursiveOptionalAndTable {
    1: RecursiveOptionalStruct recursive_optional;
};

struct RecursiveOptionalAndTableStruct {
    RecursiveOptionalAndTable t;
};

struct RecursiveOptionalAndVectorStruct {
    vector<RecursiveOptionalStruct> vec;
};

struct RecursiveOptionalStructWithString {
    RecursiveOptionalStructWithString? inner;
    string? str;
};
