// 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.

// This is intended to ensure that the GIDL-generated test code produces the
// correct syntax for C++ bindings, which needs to distinguish between e.g.
// using "Foo foo;" vs "std::unique_ptr<Foo> foo;" for optional (nullable)
// fields, "object.foo()" vs "object->foo()" vs "object.set_foo()", etc.

library conformance;

table TableWithEmptyStruct {
    1: EmptyStruct s;
};

xunion XUnionWithEmptyStruct {
    EmptyStruct s;
};

union UnionWithEmptyStruct {
    EmptyStruct s;
    EmptyStruct? s2;
};

struct StructWithOptionals {
    EmptyStruct s;
    EmptyStruct? s2;
    TableWithEmptyStruct t;
    // nullable tables are not allowed.
    XUnionWithEmptyStruct xu;
    XUnionWithEmptyStruct? xu2;
    UnionWithEmptyStruct u;
    UnionWithEmptyStruct? u2;
};
