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

// fidl_experiment = output_index_json

#pragma once

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

#endif  // __Fuchsia__
#include <fidl/test.dependent/cpp/type_conversions.h>
#include <lib/fidl/cpp/wire_natural_conversions.h>
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

namespace fidl {
namespace internal {

template <>
struct WireNaturalConversionTraits<::test_structdefaultvalueenumlibraryreference::wire::Foo, ::test_structdefaultvalueenumlibraryreference::Foo> {
  static ::test_structdefaultvalueenumlibraryreference::Foo ToNatural(::test_structdefaultvalueenumlibraryreference::wire::Foo src);
  static ::test_structdefaultvalueenumlibraryreference::wire::Foo ToWire(fidl::AnyArena& arena, ::test_structdefaultvalueenumlibraryreference::Foo src);
};

template <>
struct NaturalTypeForWireType<::test_structdefaultvalueenumlibraryreference::wire::Foo> {
  using type = ::test_structdefaultvalueenumlibraryreference::Foo;
};
template <>
struct WireTypeForNaturalType<::test_structdefaultvalueenumlibraryreference::Foo> {
  using type = ::test_structdefaultvalueenumlibraryreference::wire::Foo;
};

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
