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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace internal {

template <>
struct NaturalToHLCPPTraits<::test_importedconstvalues::MyStruct> {
  using HLCPPType = ::test::importedconstvalues::MyStruct;
  static inline ::test::importedconstvalues::MyStruct Convert(::test_importedconstvalues::MyStruct&&);
};
template <>
struct HLCPPToNaturalTraits<::test::importedconstvalues::MyStruct> {
  using NaturalType = ::test_importedconstvalues::MyStruct;
  static inline ::test_importedconstvalues::MyStruct Convert(::test::importedconstvalues::MyStruct&&);
};

::test::importedconstvalues::MyStruct NaturalToHLCPPTraits<::test_importedconstvalues::MyStruct>::Convert(::test_importedconstvalues::MyStruct&& value) {
  ::test::importedconstvalues::MyStruct hlcpp;
  hlcpp.__reserved = ::fidl::NaturalToHLCPP(std::move(value.__reserved()));
  return hlcpp;
}

::test_importedconstvalues::MyStruct HLCPPToNaturalTraits<::test::importedconstvalues::MyStruct>::Convert(::test::importedconstvalues::MyStruct&& value) {
  return ::test_importedconstvalues::MyStruct{{
      .__reserved = ::fidl::HLCPPToNatural(std::move(value.__reserved)),
  }};
}

#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
