// 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.middle/cpp/wire_types.h>
#include <fidl/test.transitivedependencies/cpp/common_types.h>
#include <fidl/test.transitivedependencies/cpp/markers.h>

namespace test_transitivedependencies {
namespace wire {
struct Baz;

extern "C" const fidl_type_t test_transitivedependencies_BazTable;

struct Baz {
  ::test_middle::wire::Bar g = {};
};

}  // namespace wire
}  // namespace test_transitivedependencies
namespace fidl {

template <>
struct TypeTraits<::test_transitivedependencies::wire::Baz> {
  static constexpr const fidl_type_t* kType =
      &::test_transitivedependencies::wire::
          test_transitivedependencies_BazTable;
  static constexpr uint32_t kMaxNumHandles = 0;
  static constexpr uint32_t kPrimarySize = 4;
  static constexpr uint32_t kPrimarySizeV1 = 4;
  [[maybe_unused]] static constexpr uint32_t kMaxOutOfLine = 0;
  static constexpr uint32_t kMaxOutOfLineV1 = 0;
  static constexpr bool kHasPointer = false;
};

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

}  // namespace fidl
