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

// fidl_experiment = output_index_json

#pragma once

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

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

namespace fidl {
namespace internal {

template <>
struct NaturalToHLCPPTraits<::test_escaping::DocCommentWithQuotes> {
  using HLCPPType = ::test::escaping::DocCommentWithQuotes;
  static inline ::test::escaping::DocCommentWithQuotes Convert(::test_escaping::DocCommentWithQuotes&&);
};
template <>
struct HLCPPToNaturalTraits<::test::escaping::DocCommentWithQuotes> {
  using NaturalType = ::test_escaping::DocCommentWithQuotes;
  static inline ::test_escaping::DocCommentWithQuotes Convert(::test::escaping::DocCommentWithQuotes&&);
};

::test::escaping::DocCommentWithQuotes NaturalToHLCPPTraits<::test_escaping::DocCommentWithQuotes>::Convert(::test_escaping::DocCommentWithQuotes&& value) {
  ::test::escaping::DocCommentWithQuotes hlcpp;
  hlcpp.__reserved = ::fidl::NaturalToHLCPP(std::move(value.__reserved()));
  return hlcpp;
}

::test_escaping::DocCommentWithQuotes HLCPPToNaturalTraits<::test::escaping::DocCommentWithQuotes>::Convert(::test::escaping::DocCommentWithQuotes&& value) {
  return ::test_escaping::DocCommentWithQuotes{{
      .__reserved = ::fidl::HLCPPToNatural(std::move(value.__reserved)),
  }};
}

#pragma clang diagnostic pop

}  // namespace internal
}  // namespace fidl
