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

#include <fidl/test.placementofattributes/cpp/type_conversions.h>

namespace fidl {
namespace internal {

::test_placementofattributes::ExampleStruct WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleStruct, ::test_placementofattributes::ExampleStruct>::ToNatural(::test_placementofattributes::wire::ExampleStruct src) {
  return ::test_placementofattributes::ExampleStruct(WireNaturalConversionTraits<uint32_t, uint32_t>::ToNatural(std::move(src.member)));
}
::test_placementofattributes::wire::ExampleStruct WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleStruct, ::test_placementofattributes::ExampleStruct>::ToWire(fidl::AnyArena& arena, ::test_placementofattributes::ExampleStruct src) {
  return ::test_placementofattributes::wire::ExampleStruct{
      .member = WireNaturalConversionTraits<uint32_t, uint32_t>::ToWire(arena, std::move(src.member())),
  };
}

::test_placementofattributes::ExampleProtocolMethodRequest WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleProtocolMethodRequest, ::test_placementofattributes::ExampleProtocolMethodRequest>::ToNatural(::test_placementofattributes::wire::ExampleProtocolMethodRequest src) {
  return ::test_placementofattributes::ExampleProtocolMethodRequest(WireNaturalConversionTraits<::test_exampleusing::wire::Empty, ::test_exampleusing::Empty>::ToNatural(std::move(src.arg)));
}
::test_placementofattributes::wire::ExampleProtocolMethodRequest WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleProtocolMethodRequest, ::test_placementofattributes::ExampleProtocolMethodRequest>::ToWire(fidl::AnyArena& arena, ::test_placementofattributes::ExampleProtocolMethodRequest src) {
  return ::test_placementofattributes::wire::ExampleProtocolMethodRequest{
      .arg = WireNaturalConversionTraits<::test_exampleusing::wire::Empty, ::test_exampleusing::Empty>::ToWire(arena, std::move(src.arg())),
  };
}

::test_placementofattributes::ExampleTable WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleTable, ::test_placementofattributes::ExampleTable>::ToNatural(::test_placementofattributes::wire::ExampleTable src) {
  ::test_placementofattributes::ExampleTable dst;
  if (src.has_member()) {
    dst.member() =
        WireNaturalConversionTraits<uint32_t, uint32_t>::ToNatural(std::move(src.member()));
  }

  return dst;
}
::test_placementofattributes::wire::ExampleTable WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleTable, ::test_placementofattributes::ExampleTable>::ToWire(fidl::AnyArena& arena, ::test_placementofattributes::ExampleTable src) {
  auto builder = ::test_placementofattributes::wire::ExampleTable::Builder(arena);
  if (src.member().has_value()) {
    builder.member(
        WireNaturalConversionTraits<uint32_t, uint32_t>::ToWire(arena, std::move(src.member().value())));
  }
  return builder.Build();
}

::test_placementofattributes::ExampleXUnion WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleXUnion, ::test_placementofattributes::ExampleXUnion>::ToNatural(::test_placementofattributes::wire::ExampleXUnion src) {
  switch (src.Which()) {
    case ::test_placementofattributes::wire::ExampleXUnion::Tag::kVariant:
      return ::test_placementofattributes::ExampleXUnion::WithVariant(
          WireNaturalConversionTraits<uint32_t, uint32_t>::ToNatural(std::move(src.variant())));
    default:
      return ::test_placementofattributes::ExampleXUnion();
  }
}
::test_placementofattributes::wire::ExampleXUnion WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleXUnion, ::test_placementofattributes::ExampleXUnion>::ToWire(fidl::AnyArena& arena, ::test_placementofattributes::ExampleXUnion src) {
  switch (src.Which()) {
    case ::test_placementofattributes::ExampleXUnion::Tag::kVariant:
      return ::test_placementofattributes::wire::ExampleXUnion::WithVariant(
          WireNaturalConversionTraits<uint32_t, uint32_t>::ToWire(arena, std::move(src.variant().value())));
    default:
      return ::test_placementofattributes::wire::ExampleXUnion();
  }
}

std::unique_ptr<::test_placementofattributes::ExampleXUnion> WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleXUnion, std::unique_ptr<::test_placementofattributes::ExampleXUnion>>::ToNatural(::test_placementofattributes::wire::ExampleXUnion src) {
  if (src.has_invalid_tag()) {
    return nullptr;
  }
  return std::make_unique<::test_placementofattributes::ExampleXUnion>(WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleXUnion, ::test_placementofattributes::ExampleXUnion>::ToNatural(std::move(src)));
}
::test_placementofattributes::wire::ExampleXUnion WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleXUnion, std::unique_ptr<::test_placementofattributes::ExampleXUnion>>::ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_placementofattributes::ExampleXUnion> src) {
  if (!src) {
    return ::test_placementofattributes::wire::ExampleXUnion();
  }
  return WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleXUnion, ::test_placementofattributes::ExampleXUnion>::ToWire(arena, std::move(*src));
}

::test_placementofattributes::ExampleUnion WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleUnion, ::test_placementofattributes::ExampleUnion>::ToNatural(::test_placementofattributes::wire::ExampleUnion src) {
  switch (src.Which()) {
    case ::test_placementofattributes::wire::ExampleUnion::Tag::kVariant:
      return ::test_placementofattributes::ExampleUnion::WithVariant(
          WireNaturalConversionTraits<uint32_t, uint32_t>::ToNatural(std::move(src.variant())));
    default:
      ZX_PANIC("unknown union tag in strict union");
  }
}
::test_placementofattributes::wire::ExampleUnion WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleUnion, ::test_placementofattributes::ExampleUnion>::ToWire(fidl::AnyArena& arena, ::test_placementofattributes::ExampleUnion src) {
  switch (src.Which()) {
    case ::test_placementofattributes::ExampleUnion::Tag::kVariant:
      return ::test_placementofattributes::wire::ExampleUnion::WithVariant(
          WireNaturalConversionTraits<uint32_t, uint32_t>::ToWire(arena, std::move(src.variant().value())));
  }
}

std::unique_ptr<::test_placementofattributes::ExampleUnion> WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleUnion, std::unique_ptr<::test_placementofattributes::ExampleUnion>>::ToNatural(::test_placementofattributes::wire::ExampleUnion src) {
  if (src.has_invalid_tag()) {
    return nullptr;
  }
  return std::make_unique<::test_placementofattributes::ExampleUnion>(WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleUnion, ::test_placementofattributes::ExampleUnion>::ToNatural(std::move(src)));
}
::test_placementofattributes::wire::ExampleUnion WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleUnion, std::unique_ptr<::test_placementofattributes::ExampleUnion>>::ToWire(fidl::AnyArena& arena, std::unique_ptr<::test_placementofattributes::ExampleUnion> src) {
  if (!src) {
    return ::test_placementofattributes::wire::ExampleUnion();
  }
  return WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleUnion, ::test_placementofattributes::ExampleUnion>::ToWire(arena, std::move(*src));
}

#ifdef __Fuchsia__

::fidl::Request<::test_placementofattributes::ExampleProtocol::Method> WireNaturalConversionTraits<::fidl::WireRequest<::test_placementofattributes::ExampleProtocol::Method>, ::fidl::Request<::test_placementofattributes::ExampleProtocol::Method>>::ToNatural(::fidl::WireRequest<::test_placementofattributes::ExampleProtocol::Method> src) {
  return ::fidl::Request<::test_placementofattributes::ExampleProtocol::Method>(
      WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleProtocolMethodRequest, ::test_placementofattributes::ExampleProtocolMethodRequest>::ToNatural(std::move(src)));
}
::fidl::WireRequest<::test_placementofattributes::ExampleProtocol::Method> WireNaturalConversionTraits<::fidl::WireRequest<::test_placementofattributes::ExampleProtocol::Method>, ::fidl::Request<::test_placementofattributes::ExampleProtocol::Method>>::ToWire(fidl::AnyArena& arena, ::fidl::Request<::test_placementofattributes::ExampleProtocol::Method> src) {
  return ::fidl::WireRequest<::test_placementofattributes::ExampleProtocol::Method>(
      WireNaturalConversionTraits<::test_placementofattributes::wire::ExampleProtocolMethodRequest, ::test_placementofattributes::ExampleProtocolMethodRequest>::ToWire(arena, std::move(src)));
}
#endif  // __Fuchsia__
}  // namespace internal
}  // namespace fidl
