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

// fidl_experiment = output_index_json

#pragma once

#include <fidl/test.byteandbytes/cpp/natural_types.h>
#include <lib/fidl/cpp/hlcpp_conversion.h>
#include <lib/fidl/cpp/wire/service_handler.h>
#include <test/byteandbytes/cpp/fidl.h>

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

namespace fidl {
namespace internal {

template <>
struct NaturalToHLCPPTraits<::test_byteandbytes::ByteAndBytes> {
  using HLCPPType = ::test::byteandbytes::ByteAndBytes;
  static inline ::test::byteandbytes::ByteAndBytes Convert(::test_byteandbytes::ByteAndBytes&&);
};
template <>
struct HLCPPToNaturalTraits<::test::byteandbytes::ByteAndBytes> {
  using NaturalType = ::test_byteandbytes::ByteAndBytes;
  static inline ::test_byteandbytes::ByteAndBytes Convert(::test::byteandbytes::ByteAndBytes&&);
};

::test::byteandbytes::ByteAndBytes NaturalToHLCPPTraits<::test_byteandbytes::ByteAndBytes>::Convert(::test_byteandbytes::ByteAndBytes&& value) {
  ::test::byteandbytes::ByteAndBytes hlcpp;
  hlcpp.single_byte = ::fidl::NaturalToHLCPP(std::move(value.single_byte()));
  return hlcpp;
}

::test_byteandbytes::ByteAndBytes HLCPPToNaturalTraits<::test::byteandbytes::ByteAndBytes>::Convert(::test::byteandbytes::ByteAndBytes&& value) {
  return ::test_byteandbytes::ByteAndBytes{{
      .single_byte = ::fidl::HLCPPToNatural(std::move(value.single_byte)),
  }};
}

#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
