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

#pragma once

#include <lib/fidl/llcpp/array.h>
#include <lib/fidl/llcpp/coding.h>
#include <lib/fidl/llcpp/envelope.h>
#include <lib/fidl/llcpp/message.h>
#include <lib/fidl/llcpp/message_storage.h>
#include <lib/fidl/llcpp/object_view.h>
#include <lib/fidl/llcpp/string_view.h>
#include <lib/fidl/llcpp/traits.h>
#include <lib/fidl/llcpp/wire_types.h>
#include <lib/stdcompat/optional.h>

#include <cinttypes>
#ifdef __Fuchsia__

#endif  // __Fuchsia__

#include <fidl/test.escaping/cpp/common_types.h>
#include <fidl/test.escaping/cpp/markers.h>

namespace test_escaping {
namespace wire {
struct DocCommentWithQuotes;

extern "C" const fidl_type_t test_escaping_DocCommentWithQuotesTable;

/// "pleaseescapethisdocommentproperly"
struct DocCommentWithQuotes {
  uint8_t __reserved = {};
};

}  // namespace wire
}  // namespace test_escaping
namespace fidl {

template <>
struct TypeTraits<::test_escaping::wire::DocCommentWithQuotes> {
  static constexpr const fidl_type_t* kType =
      &::test_escaping::wire::test_escaping_DocCommentWithQuotesTable;
  static constexpr uint32_t kMaxNumHandles = 0;
  static constexpr uint32_t kPrimarySize = 1;
  static constexpr uint32_t kPrimarySizeV1 = 1;
  [[maybe_unused]] static constexpr uint32_t kMaxOutOfLine = 0;
  static constexpr uint32_t kMaxOutOfLineV1 = 0;
  static constexpr bool kHasPointer = false;
};

template <>
struct IsFidlType<::test_escaping::wire::DocCommentWithQuotes>
    : public std::true_type {};
template <>
struct IsStruct<::test_escaping::wire::DocCommentWithQuotes>
    : public std::true_type {};
static_assert(
    std::is_standard_layout_v<::test_escaping::wire::DocCommentWithQuotes>);
static_assert(offsetof(::test_escaping::wire::DocCommentWithQuotes,
                       __reserved) == 0);
static_assert(
    sizeof(::test_escaping::wire::DocCommentWithQuotes) ==
    TypeTraits<::test_escaping::wire::DocCommentWithQuotes>::kPrimarySize);

}  // namespace fidl
