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

// fidl_experiment = output_index_json

#pragma once

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::TablePayload> {
  using type = ::test_protocollayoutssamelibrary::TablePayload;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::TablePayload> {
  using type = ::test_protocollayoutssamelibrary::wire::TablePayload;
};

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolOneWayAnonComposedRequest> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolOneWayAnonComposedRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolOneWayAnonComposedRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolOneWayAnonComposedRequest;
};

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedResponse> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedResponse;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedResponse> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedResponse;
};

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorRequest> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorRequest;
};

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolOneWayAnonRequest> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolOneWayAnonRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolOneWayAnonRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolOneWayAnonRequest;
};

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonResponse> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonResponse;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonResponse> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonResponse;
};

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

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorRequest> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorRequest;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::UnionPayload>, std::unique_ptr<::test_protocollayoutssamelibrary::UnionPayload>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::UnionPayload> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::UnionPayload> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::UnionPayload> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::UnionPayload> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::UnionPayload> {
  using type = ::test_protocollayoutssamelibrary::UnionPayload;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::UnionPayload> {
  using type = ::test_protocollayoutssamelibrary::wire::UnionPayload;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedRequest>, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedRequest> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedRequest> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedRequest> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedRequest;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResponse>, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResponse> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResponse> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResponse> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResponse> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResponse;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResult>, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResult> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResult> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayAnonComposedWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayAnonComposedWithErrorResult;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolOnAnonComposedRequest>, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolOnAnonComposedRequest> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolOnAnonComposedRequest> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolOnAnonComposedRequest> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolOnAnonComposedRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolOnAnonComposedRequest;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayNamedComposedWithErrorResult>, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayNamedComposedWithErrorResult> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayNamedComposedWithErrorResult> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayNamedComposedWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::ComposedProtocolTwoWayNamedComposedWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::wire::ComposedProtocolTwoWayNamedComposedWithErrorResult;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayLocalWithErrorResult>, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayLocalWithErrorResult> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayLocalWithErrorResult> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayLocalWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolTwoWayLocalWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayLocalWithErrorResult;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonRequest>, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonRequest> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonRequest> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonRequest> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonRequest;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResponse>, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResponse> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResponse> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResponse> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResponse> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResponse;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResult>, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResult> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResult> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolTwoWayAnonWithErrorResult> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolTwoWayAnonWithErrorResult;
};

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

template <>
struct WireNaturalConversionTraits<::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolOnAnonRequest>, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest>> {
  static std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest> ToNatural(::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolOnAnonRequest> src);
  static ::fidl::WireOptional<::test_protocollayoutssamelibrary::wire::MainProtocolOnAnonRequest> ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest> src);
};

template <>
struct NaturalTypeForWireType<::test_protocollayoutssamelibrary::wire::MainProtocolOnAnonRequest> {
  using type = ::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest;
};
template <>
struct WireTypeForNaturalType<::test_protocollayoutssamelibrary::MainProtocolOnAnonRequest> {
  using type = ::test_protocollayoutssamelibrary::wire::MainProtocolOnAnonRequest;
};

#ifdef __Fuchsia__

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed>, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposed>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError>, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayAnonComposedWithError>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed>, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposed>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError>, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::ComposedProtocol::TwoWayNamedComposedWithError>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposed>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonComposedWithError>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposed>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayNamedComposedWithError>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocal>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayLocalWithError>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnon>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError>, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError>> {
  static ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError> ToNatural(::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError> src);
  static ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError>> {
  using type = ::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError>> {
  using type = ::fidl::WireResponse<::test_protocollayoutssamelibrary::MainProtocol::TwoWayAnonWithError>;
};

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
