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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.enum/cpp/natural_types.h>
#include <lib/fidl/cpp/hlcpp_conversion.h>
#include <lib/fidl/cpp/wire/service_handler.h>
#include <test/enum/cpp/fidl.h>

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

namespace fidl {
namespace internal {

template <>
struct NaturalToHLCPPTraits<::test_enum::MyStrictEnum> : public NaturalToHLCPPTraitsEnum<::test_enum::MyStrictEnum, ::test::enum_::MyStrictEnum, uint32_t> {};
template <>
struct HLCPPToNaturalTraits<::test::enum_::MyStrictEnum> : public HLCPPToNaturalTraitsEnum<::test::enum_::MyStrictEnum, ::test_enum::MyStrictEnum> {};
template <>
struct NaturalToHLCPPTraits<::test_enum::MyFlexibleEnum> : public NaturalToHLCPPTraitsEnum<::test_enum::MyFlexibleEnum, ::test::enum_::MyFlexibleEnum, uint32_t> {};
template <>
struct HLCPPToNaturalTraits<::test::enum_::MyFlexibleEnum> : public HLCPPToNaturalTraitsEnum<::test::enum_::MyFlexibleEnum, ::test_enum::MyFlexibleEnum> {};
template <>
struct NaturalToHLCPPTraits<::test_enum::MyFlexibleEnumWithCustomUnknown> : public NaturalToHLCPPTraitsEnum<::test_enum::MyFlexibleEnumWithCustomUnknown, ::test::enum_::MyFlexibleEnumWithCustomUnknown, uint32_t> {};
template <>
struct HLCPPToNaturalTraits<::test::enum_::MyFlexibleEnumWithCustomUnknown> : public HLCPPToNaturalTraitsEnum<::test::enum_::MyFlexibleEnumWithCustomUnknown, ::test_enum::MyFlexibleEnumWithCustomUnknown> {};
template <>
struct NaturalToHLCPPTraits<::test_enum::MyEmptyFlexibleEnum> : public NaturalToHLCPPTraitsEnum<::test_enum::MyEmptyFlexibleEnum, ::test::enum_::MyEmptyFlexibleEnum, uint32_t> {};
template <>
struct HLCPPToNaturalTraits<::test::enum_::MyEmptyFlexibleEnum> : public HLCPPToNaturalTraitsEnum<::test::enum_::MyEmptyFlexibleEnum, ::test_enum::MyEmptyFlexibleEnum> {};

#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
