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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.drivertwoway/cpp/markers.h>
#include <fidl/test.drivertwoway/cpp/natural_types.h>
#include <fidl/test.drivertwoway/cpp/wire_types.h>
#ifdef __Fuchsia__
#include <fidl/test.drivertwoway/cpp/natural_messaging.h>
#include <fidl/test.drivertwoway/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 {

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

template <>
struct NaturalTypeForWireType<::test_drivertwoway::wire::TwoWayAddRequest> {
  using type = ::test_drivertwoway::TwoWayAddRequest;
};
template <>
struct WireTypeForNaturalType<::test_drivertwoway::TwoWayAddRequest> {
  using type = ::test_drivertwoway::wire::TwoWayAddRequest;
};

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

template <>
struct NaturalTypeForWireType<::test_drivertwoway::wire::TwoWayAddResponse> {
  using type = ::test_drivertwoway::TwoWayAddResponse;
};
template <>
struct WireTypeForNaturalType<::test_drivertwoway::TwoWayAddResponse> {
  using type = ::test_drivertwoway::wire::TwoWayAddResponse;
};

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
