// WARNING: This file is machine generated by fidlgen.

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.enum/cpp/markers.h>
#include <fidl/test.enum/cpp/natural_types.h>
#include <fidl/test.enum/cpp/wire_types.h>
#ifdef __Fuchsia__
#include <fidl/test.enum/cpp/natural_messaging.h>
#include <fidl/test.enum/cpp/wire_messaging.h>

#endif  // __Fuchsia__
#include <lib/fidl/cpp/wire_natural_conversions.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

namespace fidl {
namespace internal {

template <>
struct NaturalTypeForWireType<::test_enum::wire::MyStrictEnum> {
  using type = ::test_enum::MyStrictEnum;
};
template <>
struct WireTypeForNaturalType<::test_enum::MyStrictEnum> {
  using type = ::test_enum::wire::MyStrictEnum;
};
template <>
struct NaturalTypeForWireType<::test_enum::wire::MyFlexibleEnum> {
  using type = ::test_enum::MyFlexibleEnum;
};
template <>
struct WireTypeForNaturalType<::test_enum::MyFlexibleEnum> {
  using type = ::test_enum::wire::MyFlexibleEnum;
};
template <>
struct NaturalTypeForWireType<::test_enum::wire::MyFlexibleEnumWithCustomUnknown> {
  using type = ::test_enum::MyFlexibleEnumWithCustomUnknown;
};
template <>
struct WireTypeForNaturalType<::test_enum::MyFlexibleEnumWithCustomUnknown> {
  using type = ::test_enum::wire::MyFlexibleEnumWithCustomUnknown;
};
template <>
struct NaturalTypeForWireType<::test_enum::wire::MyEmptyFlexibleEnum> {
  using type = ::test_enum::MyEmptyFlexibleEnum;
};
template <>
struct WireTypeForNaturalType<::test_enum::MyEmptyFlexibleEnum> {
  using type = ::test_enum::wire::MyEmptyFlexibleEnum;
};

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
