# 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/struct/c/fidl.h>
fidl_test_struct_SimpleInLine {
       f1 int8
       f2 int8
} [packed]
fidl_test_struct_SimpleOutOfLine {
       void void
} [packed]
fidl_test_struct_SimpleHandles {
       void void
} [packed]
fidl_test_struct_BasicStructInLine {
       x int32
       yInLine fidl_string
} [packed]
fidl_test_struct_BasicStructOutOfLine {
       yOutOfLine fidl_aligned[stringnoz]
} [packed]
fidl_test_struct_BasicStructHandles {
       void void
} [packed]

