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

#pragma once

#include <lib/fidl/internal.h>
#include <lib/fidl/cpp/vector_view.h>
#include <lib/fidl/cpp/string_view.h>
#include <lib/fidl/llcpp/array_wrapper.h>
#include <lib/fidl/llcpp/coding.h>
#include <lib/fidl/llcpp/traits.h>
#include <zircon/fidl.h>

namespace test {
namespace name {

struct Empty;



struct Empty {
  static constexpr const fidl_type_t* Type = nullptr;
  static constexpr uint32_t MaxNumHandles = 0;
  static constexpr uint32_t PrimarySize = 1;
  [[maybe_unused]]
  static constexpr uint32_t MaxOutOfLine = 0;

  uint8_t __reserved = 0;
};

}  // namespace name
}  // namespace test

namespace fidl {

template <>
struct IsFidlType<::test::name::Empty> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test::name::Empty>);
static_assert(offsetof(::test::name::Empty, __reserved) == 0);
static_assert(sizeof(::test::name::Empty) == ::test::name::Empty::PrimarySize);

}  // namespace fidl
