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

// fidl_experiment = output_index_json

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

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

namespace fidl {
namespace internal {

::test_byteandbytes::ByteAndBytes WireNaturalConversionTraits<::test_byteandbytes::wire::ByteAndBytes, ::test_byteandbytes::ByteAndBytes>::ToNatural(::test_byteandbytes::wire::ByteAndBytes src) {
  return ::test_byteandbytes::ByteAndBytes(WireNaturalConversionTraits<uint8_t, uint8_t>::ToNatural(std::move(src.single_byte)));
}
::test_byteandbytes::wire::ByteAndBytes WireNaturalConversionTraits<::test_byteandbytes::wire::ByteAndBytes, ::test_byteandbytes::ByteAndBytes>::ToWire(fidl::AnyArena& arena, ::test_byteandbytes::ByteAndBytes src) {
  return ::test_byteandbytes::wire::ByteAndBytes{
      .single_byte = WireNaturalConversionTraits<uint8_t, uint8_t>::ToWire(arena, std::move(src.single_byte())),
  };
}

#ifdef __Fuchsia__

#endif  // __Fuchsia__
#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
