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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.typesinprotocols/cpp/markers.h>
#include <fidl/test.typesinprotocols/cpp/natural_types.h>
#include <fidl/test.typesinprotocols/cpp/wire_types.h>
#ifdef __Fuchsia__
#include <fidl/test.typesinprotocols/cpp/natural_messaging.h>
#include <fidl/test.typesinprotocols/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 NaturalTypeForWireType<::test_typesinprotocols::wire::Bits> {
  using type = ::test_typesinprotocols::Bits;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Bits> {
  using type = ::test_typesinprotocols::wire::Bits;
};

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Enum> {
  using type = ::test_typesinprotocols::Enum;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Enum> {
  using type = ::test_typesinprotocols::wire::Enum;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Struct> {
  using type = ::test_typesinprotocols::Struct;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Struct> {
  using type = ::test_typesinprotocols::wire::Struct;
};

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ResourceStruct> {
  using type = ::test_typesinprotocols::ResourceStruct;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ResourceStruct> {
  using type = ::test_typesinprotocols::wire::ResourceStruct;
};

#endif  // __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Basic> {
  using type = ::test_typesinprotocols::Basic;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Basic> {
  using type = ::test_typesinprotocols::wire::Basic;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Compound> {
  using type = ::test_typesinprotocols::Compound;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Compound> {
  using type = ::test_typesinprotocols::wire::Compound;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ArrayBasic> {
  using type = ::test_typesinprotocols::ArrayBasic;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ArrayBasic> {
  using type = ::test_typesinprotocols::wire::ArrayBasic;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ArrayCompound> {
  using type = ::test_typesinprotocols::ArrayCompound;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ArrayCompound> {
  using type = ::test_typesinprotocols::wire::ArrayCompound;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::VectorBasic> {
  using type = ::test_typesinprotocols::VectorBasic;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::VectorBasic> {
  using type = ::test_typesinprotocols::wire::VectorBasic;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::VectorCompound> {
  using type = ::test_typesinprotocols::VectorCompound;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::VectorCompound> {
  using type = ::test_typesinprotocols::wire::VectorCompound;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::VectorOptional> {
  using type = ::test_typesinprotocols::VectorOptional;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::VectorOptional> {
  using type = ::test_typesinprotocols::wire::VectorOptional;
};

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ArrayVectorNested> {
  using type = ::test_typesinprotocols::ArrayVectorNested;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ArrayVectorNested> {
  using type = ::test_typesinprotocols::wire::ArrayVectorNested;
};

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Resource> {
  using type = ::test_typesinprotocols::Resource;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Resource> {
  using type = ::test_typesinprotocols::wire::Resource;
};

#endif  // __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Table> {
  using type = ::test_typesinprotocols::Table;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Table> {
  using type = ::test_typesinprotocols::wire::Table;
};

#ifdef __Fuchsia__

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ResourceTable> {
  using type = ::test_typesinprotocols::ResourceTable;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ResourceTable> {
  using type = ::test_typesinprotocols::wire::ResourceTable;
};

#endif  // __Fuchsia__

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::Union> {
  using type = ::test_typesinprotocols::Union;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::Union> {
  using type = ::test_typesinprotocols::wire::Union;
};

#ifdef __Fuchsia__

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ResourceUnion> {
  using type = ::test_typesinprotocols::ResourceUnion;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ResourceUnion> {
  using type = ::test_typesinprotocols::wire::ResourceUnion;
};

#endif  // __Fuchsia__

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorBasicResult> {
  using type = ::test_typesinprotocols::ProtocolErrorBasicResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorBasicResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorBasicResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorCompoundResult> {
  using type = ::test_typesinprotocols::ProtocolErrorCompoundResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorCompoundResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorCompoundResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorArrayBasicResult> {
  using type = ::test_typesinprotocols::ProtocolErrorArrayBasicResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorArrayBasicResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorArrayBasicResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorArrayCompoundResult> {
  using type = ::test_typesinprotocols::ProtocolErrorArrayCompoundResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorArrayCompoundResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorArrayCompoundResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorVectorBasicResult> {
  using type = ::test_typesinprotocols::ProtocolErrorVectorBasicResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorVectorBasicResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorVectorBasicResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorVectorCompoundResult> {
  using type = ::test_typesinprotocols::ProtocolErrorVectorCompoundResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorVectorCompoundResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorVectorCompoundResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorVectorOptionalResult> {
  using type = ::test_typesinprotocols::ProtocolErrorVectorOptionalResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorVectorOptionalResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorVectorOptionalResult;
};

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorArrayVectorNestedResult> {
  using type = ::test_typesinprotocols::ProtocolErrorArrayVectorNestedResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorArrayVectorNestedResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorArrayVectorNestedResult;
};

#ifdef __Fuchsia__

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

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

template <>
struct NaturalTypeForWireType<::test_typesinprotocols::wire::ProtocolErrorResourceResult> {
  using type = ::test_typesinprotocols::ProtocolErrorResourceResult;
};
template <>
struct WireTypeForNaturalType<::test_typesinprotocols::ProtocolErrorResourceResult> {
  using type = ::test_typesinprotocols::wire::ProtocolErrorResourceResult;
};

#endif  // __Fuchsia__

#ifdef __Fuchsia__

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayBasic>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayBasic>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayBasic> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayBasic> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayBasic> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayBasic> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayBasic>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayBasic>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayBasic>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayBasic>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorBasic>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorBasic>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorBasic> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorBasic> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorBasic> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorBasic> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorBasic>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorBasic>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorBasic>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorBasic>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayCompound>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayCompound>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayCompound> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayCompound> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayCompound> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayCompound> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayCompound>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayCompound>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayCompound>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayCompound>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorCompound>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorCompound>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorCompound> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorCompound> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorCompound> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorCompound> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorCompound>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorCompound>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorCompound>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorCompound>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayBasic>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayBasic>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayBasic> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayBasic> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayBasic> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayBasic> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayBasic>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayBasic>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayBasic>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayBasic>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayBasic>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayBasic>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayBasic> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayBasic> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayBasic> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayBasic> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayBasic>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayBasic>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayBasic>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayBasic>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayCompound>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayCompound>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayCompound> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayCompound> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayCompound> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayCompound> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayCompound>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayCompound>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayCompound>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayCompound>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayCompound>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayCompound>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayCompound> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayCompound> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayCompound> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayCompound> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayCompound>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayCompound>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayCompound>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayCompound>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorBasic>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorBasic>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorBasic> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorBasic> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorBasic> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorBasic> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorBasic>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorBasic>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorBasic>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorBasic>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorBasic>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorBasic>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorBasic> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorBasic> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorBasic> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorBasic> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorBasic>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorBasic>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorBasic>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorBasic>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorCompound>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorCompound>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorCompound> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorCompound> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorCompound> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorCompound> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorCompound>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorCompound>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorCompound>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorCompound>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorCompound>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorCompound>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorCompound> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorCompound> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorCompound> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorCompound> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorCompound>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorCompound>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorCompound>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorCompound>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorOptional>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorOptional>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorOptional> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorOptional> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorOptional> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorOptional> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorOptional>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorOptional>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayVectorOptional>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayVectorOptional>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorOptional>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorOptional>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorOptional> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorOptional> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorOptional> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorOptional> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorOptional>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorOptional>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorVectorOptional>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorVectorOptional>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayArrayVectorNested>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayVectorNested>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayVectorNested>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayVectorNested> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayVectorNested> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayVectorNested> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayVectorNested> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayVectorNested>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayVectorNested>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorArrayVectorNested>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorArrayVectorNested>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayResource>, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayResource>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayResource> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayResource> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayResource> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayResource> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayResource>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::TwoWayResource>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::TwoWayResource>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::TwoWayResource>;
};

template <>
struct WireNaturalConversionTraits<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorResource>, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorResource>> {
  static ::fidl::Response<::test_typesinprotocols::Protocol::ErrorResource> ToNatural(::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorResource> src);
  static ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorResource> ToWire(fidl::AnyArena& arena, ::fidl::Response<::test_typesinprotocols::Protocol::ErrorResource> src);
};

template <>
struct NaturalTypeForWireType<::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorResource>> {
  using type = ::fidl::Response<::test_typesinprotocols::Protocol::ErrorResource>;
};
template <>
struct WireTypeForNaturalType<::fidl::Response<::test_typesinprotocols::Protocol::ErrorResource>> {
  using type = ::fidl::WireResponse<::test_typesinprotocols::Protocol::ErrorResource>;
};

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
