# 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/constants/c/fidl.h>
fidl_test_constants_EnumType = fidl_test_constants_EnumType_VALUE
fidl_test_constants_Enum = fidl_test_constants_Enum_E
fidl_test_constants_BitsType = fidl_test_constants_BitsType_VALUE, fidl_test_constants_BitsType_SECOND_VALUE, fidl_test_constants_BitsType_THIRD_VALUE
fidl_test_constants_Bits = fidl_test_constants_Bits_B
fidl_test_constants_StructInLine {
       int64_with_default int64
       string_with_defaultInLine fidl_string
       bool_with_default int8
       enum_with_default flags[fidl_test_constants_Enum, int32]
       bits_with_default flags[fidl_test_constants_Bits, int32]
} [packed]
fidl_test_constants_StructOutOfLine {
       string_with_defaultOutOfLine fidl_aligned[stringnoz]
} [packed]
fidl_test_constants_StructHandles {
       void void
} [packed]

