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

#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>
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__
}  // namespace internal
}  // namespace fidl
