// 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 fidl.types.test;

using zx;

@for_deprecated_c_bindings
type CopyableStruct = struct {
    x int32;
};

@for_deprecated_c_bindings
type MoveOnlyStruct = resource struct {
    h zx.handle;
};

const ARRAY_OF_STRUCT_COUNT uint32 = 32;
const ARRAY_OF_INT_COUNT uint32 = 64;

@for_deprecated_c_bindings
type StructWithArrays = struct {
    array_of_struct array<CopyableStruct, ARRAY_OF_STRUCT_COUNT>;
    array_of_int array<int32, ARRAY_OF_INT_COUNT>;
    x int32;
};

@for_deprecated_c_bindings
type EmptyStruct = struct {};

@for_deprecated_c_bindings
type StructWithSubStruct = struct {
    s CopyableStruct;
};
