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

struct StructWithInt {
    int32 x;
};

struct StructWithArrays {
    array<int32>:2 arr_int;
    array<string>:2 arr_string;
    array<string?>:2 arr_nullable_string;
    array<StructWithInt>:2 arr_struct;
    array<StructWithInt?>:2 arr_nullable_struct;
    array<array<int32>:3>:2 arr_arr_int;
};

struct StructWithVectors {
    vector<int32> vec_empty;
    vector<int32> vec_int;
    vector<string> vec_string;
    vector<string?> vec_nullable_string;
    vector<StructWithInt> vec_struct;
    vector<StructWithInt?> vec_nullable_struct;
    vector<vector<int32>> vec_vec_int;
};
