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

// fidl_experiment = output_index_json

#pragma once

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::SandwichUnionSize8Alignment4> {
  using type = ::test_unionsandwich::SandwichUnionSize8Alignment4;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::SandwichUnionSize8Alignment4> {
  using type = ::test_unionsandwich::wire::SandwichUnionSize8Alignment4;
};

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::SandwichUnionSize12Alignment4> {
  using type = ::test_unionsandwich::SandwichUnionSize12Alignment4;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::SandwichUnionSize12Alignment4> {
  using type = ::test_unionsandwich::wire::SandwichUnionSize12Alignment4;
};

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::StructSize16Alignment8> {
  using type = ::test_unionsandwich::StructSize16Alignment8;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::StructSize16Alignment8> {
  using type = ::test_unionsandwich::wire::StructSize16Alignment8;
};

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::SandwichUnionSize24Alignment8> {
  using type = ::test_unionsandwich::SandwichUnionSize24Alignment8;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::SandwichUnionSize24Alignment8> {
  using type = ::test_unionsandwich::wire::SandwichUnionSize24Alignment8;
};

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::SandwichUnionSize36Alignment4> {
  using type = ::test_unionsandwich::SandwichUnionSize36Alignment4;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::SandwichUnionSize36Alignment4> {
  using type = ::test_unionsandwich::wire::SandwichUnionSize36Alignment4;
};

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

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::UnionSize8Alignment4> {
  using type = ::test_unionsandwich::UnionSize8Alignment4;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::UnionSize8Alignment4> {
  using type = ::test_unionsandwich::wire::UnionSize8Alignment4;
};

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

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::UnionSize12Alignment4> {
  using type = ::test_unionsandwich::UnionSize12Alignment4;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::UnionSize12Alignment4> {
  using type = ::test_unionsandwich::wire::UnionSize12Alignment4;
};

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

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::UnionSize24Alignment8> {
  using type = ::test_unionsandwich::UnionSize24Alignment8;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::UnionSize24Alignment8> {
  using type = ::test_unionsandwich::wire::UnionSize24Alignment8;
};

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

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

template <>
struct NaturalTypeForWireType<::test_unionsandwich::wire::UnionSize36Alignment4> {
  using type = ::test_unionsandwich::UnionSize36Alignment4;
};
template <>
struct WireTypeForNaturalType<::test_unionsandwich::UnionSize36Alignment4> {
  using type = ::test_unionsandwich::wire::UnionSize36Alignment4;
};

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
