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

// fidl_experiment = output_index_json

#pragma once

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

#endif  // __Fuchsia__
#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_driverhandle::wire::ClientEndWrapper, ::test_driverhandle::ClientEndWrapper> {
  static ::test_driverhandle::ClientEndWrapper ToNatural(::test_driverhandle::wire::ClientEndWrapper src);
  static ::test_driverhandle::wire::ClientEndWrapper ToWire(fidl::AnyArena& arena, ::test_driverhandle::ClientEndWrapper src);
};

template <>
struct NaturalTypeForWireType<::test_driverhandle::wire::ClientEndWrapper> {
  using type = ::test_driverhandle::ClientEndWrapper;
};
template <>
struct WireTypeForNaturalType<::test_driverhandle::ClientEndWrapper> {
  using type = ::test_driverhandle::wire::ClientEndWrapper;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_driverhandle::wire::ServerEndWrapper> {
  using type = ::test_driverhandle::ServerEndWrapper;
};
template <>
struct WireTypeForNaturalType<::test_driverhandle::ServerEndWrapper> {
  using type = ::test_driverhandle::wire::ServerEndWrapper;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_driverhandle::wire::HandlesInProtocolSendHandlesRequest> {
  using type = ::test_driverhandle::HandlesInProtocolSendHandlesRequest;
};
template <>
struct WireTypeForNaturalType<::test_driverhandle::HandlesInProtocolSendHandlesRequest> {
  using type = ::test_driverhandle::wire::HandlesInProtocolSendHandlesRequest;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_driverhandle::wire::T> {
  using type = ::test_driverhandle::T;
};
template <>
struct WireTypeForNaturalType<::test_driverhandle::T> {
  using type = ::test_driverhandle::wire::T;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
