# Copyright 2018 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.
#
# WARNING: This file is machine generated by fidlgen.

include <fidl/test/arrays/c/fidl.h>
fidl_test_arrays_StructSmallArrayInLine {
       aInLine array[int32, 2]
} [packed]
fidl_test_arrays_StructSmallArrayOutOfLine {
       void void
} [packed]
fidl_test_arrays_StructSmallArrayHandles {
       void void
} [packed]
fidl_test_arrays_StructLargeArrayInLine {
       aInLine array[int32, 100]
} [packed]
fidl_test_arrays_StructLargeArrayOutOfLine {
       void void
} [packed]
fidl_test_arrays_StructLargeArrayHandles {
       void void
} [packed]
fidl_test_arrays_UnionSmallArrayInLine [
       aInLine fidl_union_member[1, array[int32, 2]]
]
fidl_test_arrays_UnionSmallArrayOutOfLine [
       void void
][varlen]
fidl_test_arrays_UnionSmallArrayHandles [
       void void
][varlen]
fidl_test_arrays_UnionLargeArrayInLine [
       aInLine fidl_union_member[1, array[int32, 100]]
]
fidl_test_arrays_UnionLargeArrayOutOfLine [
       void void
][varlen]
fidl_test_arrays_UnionLargeArrayHandles [
       void void
][varlen]

