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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.importedconstvalues/cpp/markers.h>
#include <fidl/test.importedconstvalues/cpp/natural_types.h>
#include <fidl/test.importedconstvalues/cpp/wire_types.h>
#ifdef __Fuchsia__
#include <fidl/test.importedconstvalues/cpp/natural_messaging.h>
#include <fidl/test.importedconstvalues/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_importedconstvalues::wire::MyStruct, ::test_importedconstvalues::MyStruct> {
  static ::test_importedconstvalues::MyStruct ToNatural(::test_importedconstvalues::wire::MyStruct src);
  static ::test_importedconstvalues::wire::MyStruct ToWire(fidl::AnyArena& arena, ::test_importedconstvalues::MyStruct src);
};

template <>
struct NaturalTypeForWireType<::test_importedconstvalues::wire::MyStruct> {
  using type = ::test_importedconstvalues::MyStruct;
};
template <>
struct WireTypeForNaturalType<::test_importedconstvalues::MyStruct> {
  using type = ::test_importedconstvalues::wire::MyStruct;
};

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
