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

// fidl_experiment = output_index_json

#pragma once

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

#endif  // __Fuchsia__
#include <fidl/fdf/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 {

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_handles::wire::Handles> {
  using type = ::test_handles::Handles;
};
template <>
struct WireTypeForNaturalType<::test_handles::Handles> {
  using type = ::test_handles::wire::Handles;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_handles::wire::FdfHandles> {
  using type = ::test_handles::FdfHandles;
};
template <>
struct WireTypeForNaturalType<::test_handles::FdfHandles> {
  using type = ::test_handles::wire::FdfHandles;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
