# 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/encapsulatedstructs/c/fidl.h>
fidl_test_encapsulatedstructs_Int8Int32InLine {
       a int8
       b int32
} [packed]
fidl_test_encapsulatedstructs_Int8Int32OutOfLine {
       void void
} [packed]
fidl_test_encapsulatedstructs_Int8Int32Handles {
       void void
} [packed]
fidl_test_encapsulatedstructs_Int16Int8InLine {
       a int16
       b int8
} [packed]
fidl_test_encapsulatedstructs_Int16Int8OutOfLine {
       void void
} [packed]
fidl_test_encapsulatedstructs_Int16Int8Handles {
       void void
} [packed]
fidl_test_encapsulatedstructs_ArrayInt16Int8InLine {
       arrInLine array[fidl_test_encapsulatedstructs_Int16Int8InLine, 3]
} [packed]
fidl_test_encapsulatedstructs_ArrayInt16Int8OutOfLine {
       arrOutOfLine array[fidl_test_encapsulatedstructs_Int16Int8OutOfLine, 3]
} [packed]
fidl_test_encapsulatedstructs_ArrayInt16Int8Handles {
       arrHandles array[fidl_test_encapsulatedstructs_Int16Int8Handles, 3]
} [packed]
fidl_test_encapsulatedstructs_StructPaddingTestStructInLine {
       trailingInLine fidl_test_encapsulatedstructs_Int16Int8InLine
       innerInLine fidl_test_encapsulatedstructs_Int8Int32InLine
       arrayInLine fidl_test_encapsulatedstructs_ArrayInt16Int8InLine
} [packed]
fidl_test_encapsulatedstructs_StructPaddingTestStructOutOfLine {
       trailingOutOfLine fidl_test_encapsulatedstructs_Int16Int8OutOfLine
       innerOutOfLine fidl_test_encapsulatedstructs_Int8Int32OutOfLine
       arrayOutOfLine fidl_test_encapsulatedstructs_ArrayInt16Int8OutOfLine
} [packed]
fidl_test_encapsulatedstructs_StructPaddingTestStructHandles {
       trailing fidl_test_encapsulatedstructs_Int16Int8Handles
       inner fidl_test_encapsulatedstructs_Int8Int32Handles
       array_ fidl_test_encapsulatedstructs_ArrayInt16Int8Handles
} [packed]
fidl_test_encapsulatedstructs_NonInlineStructTestStructInLine {
       elementInLine fidl_test_encapsulatedstructs_Int16Int8InLine
       h flags[fidl_handle_presence, int32]
} [packed]
fidl_test_encapsulatedstructs_NonInlineStructTestStructOutOfLine {
       elementOutOfLine fidl_test_encapsulatedstructs_Int16Int8OutOfLine
} [packed]
fidl_test_encapsulatedstructs_NonInlineStructTestStructHandles {
       element fidl_test_encapsulatedstructs_Int16Int8Handles
       h zx_handle
} [packed]
fidl_test_encapsulatedstructs_TopLevelStructInLine {
       aInLine fidl_test_encapsulatedstructs_StructPaddingTestStructInLine
       bInLine fidl_test_encapsulatedstructs_NonInlineStructTestStructInLine
} [packed]
fidl_test_encapsulatedstructs_TopLevelStructOutOfLine {
       aOutOfLine fidl_test_encapsulatedstructs_StructPaddingTestStructOutOfLine
       bOutOfLine fidl_test_encapsulatedstructs_NonInlineStructTestStructOutOfLine
} [packed]
fidl_test_encapsulatedstructs_TopLevelStructHandles {
       a fidl_test_encapsulatedstructs_StructPaddingTestStructHandles
       b fidl_test_encapsulatedstructs_NonInlineStructTestStructHandles
} [packed]

