# 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/handlesintypes/c/fidl.h>
fidl_test_handlesintypes_obj_type = fidl_test_handlesintypes_obj_type_NONE, fidl_test_handlesintypes_obj_type_VMO
fidl_test_handlesintypes_HandlesInTypesInLine {
       normal_handle flags[fidl_handle_presence, int32]
       handle_in_vecInLine fidl_vector
       handle_in_arrayInLine array[flags[fidl_handle_presence, int32], 5]
       handle_in_mixed_vec_arrayInLine fidl_vector
        
       union_with_handleInLine fidl_test_handlesintypes_UnionWithHandleInLine
} [packed]
fidl_test_handlesintypes_HandlesInTypesOutOfLine {
       handle_in_vecOutOfLine array[flags[fidl_handle_presence, int32]]
       handle_in_mixed_vec_arrayOutOfLine array[array[flags[fidl_handle_presence, int32], 5]]
} [packed]
fidl_test_handlesintypes_HandlesInTypesHandles {
       normal_handle zx_vmo
       handle_in_vec array[zx_vmo]
       handle_in_arrayHandles array[zx_vmo, 5]
       handle_in_mixed_vec_array array[array[zx_vmo, 5]]
} [packed]
fidl_test_handlesintypes_UnionWithHandleInLine [
       h fidl_union_member[1, flags[fidl_handle_presence, int32]]
]
fidl_test_handlesintypes_UnionWithHandleOutOfLine [
       void void
][varlen]
fidl_test_handlesintypes_UnionWithHandleHandles [
       h zx_vmo
][varlen]

