blob: 8c48eb6a4bd0b0c3b06bdbe1390b37c270c4b017 [file] [log] [blame]
// WARNING: This file is machine generated by fidlgen.
// fidl_experiment = output_index_json
#pragma once
#include <lib/fidl/cpp/wire/array.h>
#include <lib/fidl/cpp/wire/envelope.h>
#include <lib/fidl/cpp/wire/internal/framework_err.h>
#include <lib/fidl/cpp/wire/message.h>
#include <lib/fidl/cpp/wire/message_storage.h>
#include <lib/fidl/cpp/wire/object_view.h>
#include <lib/fidl/cpp/wire/string_view.h>
#include <lib/fidl/cpp/wire/traits.h>
#include <lib/fidl/cpp/wire/wire_types.h>
#include <lib/stdcompat/optional.h>
#include <cinttypes>
#ifdef __Fuchsia__
#include <lib/zx/vmo.h>
#endif // __Fuchsia__
#include <fidl/test.handlesintypes/cpp/common_types.h>
#include <fidl/test.handlesintypes/cpp/markers.h>
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"
namespace test_handlesintypes {
namespace wire {
using ObjType = ::test_handlesintypes::ObjType;
struct HandlesInTypes;
struct EmptyResourceStruct;
class TableWithHandle;
class EmptyResourceTable;
class UnionWithHandle;
class EmptyResourceUnion;
#ifdef __Fuchsia__
struct EmptyResourceStruct {
uint8_t __reserved = {};
void _CloseHandles();
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
} // namespace wire
} // namespace test_handlesintypes
template <>
class ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle>;
template <>
class ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle>;
template <>
struct ::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle> final {
public:
WireTableFrame() = default;
// In its intended usage, WireTableFrame will be referenced by an ObjectView.
// If the ObjectView is assigned before a move or copy, then it will reference
// the old invalid object. Because this is unsafe, copies are disallowed and
// moves are only allowed by friend classes that operate safely.
WireTableFrame(const WireTableFrame&) = delete;
WireTableFrame& operator=(const WireTableFrame&) = delete;
private:
WireTableFrame(WireTableFrame&&) noexcept = default;
WireTableFrame& operator=(WireTableFrame&&) noexcept = default;
bool HasUnknownData() const;
uint64_t ComputeMaxOrdinal() const;
::fidl::Envelope<::zx::vmo> h_;
friend class ::test_handlesintypes::wire::TableWithHandle;
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle>>;
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle>>;
};
namespace test_handlesintypes {
namespace wire {
class TableWithHandle {
public:
TableWithHandle() = default;
TableWithHandle(const TableWithHandle& other) noexcept = default;
TableWithHandle& operator=(const TableWithHandle& other) noexcept = default;
TableWithHandle(TableWithHandle&& other) noexcept = default;
TableWithHandle& operator=(TableWithHandle&& other) noexcept = default;
~TableWithHandle() = default;
// Returns whether no field is set.
bool IsEmpty() const { return max_ordinal_ == 0; }
// Returns whether the table references unknown fields.
bool HasUnknownData() const;
void _CloseHandles();
// Return a builder that by defaults allocates of an arena.
static ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle> Builder(::fidl::AnyArena& arena);
// Return a builder that relies on explicitly allocating |fidl::ObjectView|s.
static ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle> ExternalBuilder(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>> frame);
[[nodiscard]] ::zx::vmo& h() const {
ZX_ASSERT(has_h());
return frame_ptr_->h_.get_data();
}
[[nodiscard]] bool has_h() const {
return max_ordinal_ >= 1 && frame_ptr_->h_.has_data();
}
#if defined(FIDL_WIRE_ALLOW_DEPRECATED_MUTABLE_TABLES) || false
public:
#else // !defined(FIDL_WIRE_ALLOW_DEPRECATED_MUTABLE_TABLES)
private:
#endif // FIDL_WIRE_ALLOW_DEPRECATED_MUTABLE_TABLES
TableWithHandle& set_h(::zx::vmo elem) {
ZX_DEBUG_ASSERT(frame_ptr_ != nullptr);
frame_ptr_->h_.set_data(std::move(elem));
max_ordinal_ = std::max(max_ordinal_, static_cast<uint64_t>(1));
return *this;
}
TableWithHandle& clear_h() {
ZX_DEBUG_ASSERT(frame_ptr_ != nullptr);
frame_ptr_->h_.clear_data();
max_ordinal_ = frame_ptr_->ComputeMaxOrdinal();
return *this;
}
explicit TableWithHandle(::fidl::AnyArena& allocator)
: frame_ptr_(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>(allocator)) {}
// This constructor allows a user controlled allocation (not using a Arena).
// It should only be used when performance is key.
// As soon as the frame is given to the table, it must not be used directly or for another table.
explicit TableWithHandle(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>&& frame)
: frame_ptr_(std::move(frame)) {}
void Allocate(::fidl::AnyArena& allocator) {
max_ordinal_ = 0;
frame_ptr_ = ::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>(allocator);
}
void Init(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>&& frame_ptr) {
max_ordinal_ = 0;
frame_ptr_ = std::move(frame_ptr);
}
private:
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle>>;
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle>>;
uint64_t max_ordinal_ = 0;
::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>> frame_ptr_;
};
} // namespace wire
} // namespace test_handlesintypes
template <typename BuilderImpl>
class ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, BuilderImpl> {
protected:
// |Wrapper_Ignore_Me_| wraps a |fidl::ObjectView<T>| and reduces its
// priority in overload resolution. When the user writes `{}` as the
// setter argument, that would default construct the field instead of
// constructing a NULL object view.
template <typename U>
struct Wrapper_Ignore_Me_ {
Wrapper_Ignore_Me_(U v) : value(v) {}
U value;
};
public:
// Build and return the table. The builder should not be used after this.
::test_handlesintypes::wire::TableWithHandle Build() {
ZX_DEBUG_ASSERT(table_.frame_ptr_ != nullptr);
::test_handlesintypes::wire::TableWithHandle t = std::move(table_);
// Poison this builder to prevent accidental reuse.
table_.frame_ptr_ = nullptr;
return t;
}
[[nodiscard]] bool has_h() const {
return table_.has_h();
}
// Clears the h field.
//
// This method should be used sparingly, such as only during tests, as it has
// O(number_of_fields) complexity.
void clear_h() {
table_.clear_h();
}
// Getter for h.
//
[[nodiscard]] ::zx::vmo& h() const {
return table_.h();
}
// Setter for h.
//
BuilderImpl& h(::zx::vmo elem) {
ZX_DEBUG_ASSERT(table_.frame_ptr_ != nullptr);
table_.frame_ptr_->h_.set_data(std::move(elem));
table_.max_ordinal_ = std::max(table_.max_ordinal_, static_cast<uint64_t>(1));
return *static_cast<BuilderImpl*>(this);
}
protected:
WireTableBaseBuilder(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>&& frame)
: table_(std::move(frame)) {}
private:
::test_handlesintypes::wire::TableWithHandle table_;
};
template <>
class ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle> final : public ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle>> {
using Base = ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle>>;
public:
private:
friend class ::test_handlesintypes::wire::TableWithHandle;
WireTableBuilder(::fidl::AnyArena& arena)
: Base(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>(arena)),
arena_(arena) {}
[[maybe_unused]] std::reference_wrapper<::fidl::AnyArena> arena_;
};
template <>
class ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle> final : public ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle>> {
using Base = ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::TableWithHandle, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle>>;
private:
friend class ::test_handlesintypes::wire::TableWithHandle;
using Base::Base;
WireTableExternalBuilder(::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>* frame)
: Base(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>>::FromExternal(frame)) {}
};
namespace test_handlesintypes {
namespace wire {
inline ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle> TableWithHandle::Builder(::fidl::AnyArena& arena) {
return ::fidl::WireTableBuilder<::test_handlesintypes::wire::TableWithHandle>(arena);
}
inline ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle> TableWithHandle::ExternalBuilder(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::TableWithHandle>> frame) {
return ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::TableWithHandle>(std::move(frame));
}
#endif // __Fuchsia__
#ifdef __Fuchsia__
} // namespace wire
} // namespace test_handlesintypes
template <>
class ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable>;
template <>
class ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable>;
template <>
struct ::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable> final {
public:
WireTableFrame() = default;
// In its intended usage, WireTableFrame will be referenced by an ObjectView.
// If the ObjectView is assigned before a move or copy, then it will reference
// the old invalid object. Because this is unsafe, copies are disallowed and
// moves are only allowed by friend classes that operate safely.
WireTableFrame(const WireTableFrame&) = delete;
WireTableFrame& operator=(const WireTableFrame&) = delete;
private:
WireTableFrame(WireTableFrame&&) noexcept = default;
WireTableFrame& operator=(WireTableFrame&&) noexcept = default;
bool HasUnknownData() const;
uint64_t ComputeMaxOrdinal() const;
friend class ::test_handlesintypes::wire::EmptyResourceTable;
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable>>;
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable>>;
};
namespace test_handlesintypes {
namespace wire {
class EmptyResourceTable {
public:
EmptyResourceTable() = default;
EmptyResourceTable(const EmptyResourceTable& other) noexcept = default;
EmptyResourceTable& operator=(const EmptyResourceTable& other) noexcept = default;
EmptyResourceTable(EmptyResourceTable&& other) noexcept = default;
EmptyResourceTable& operator=(EmptyResourceTable&& other) noexcept = default;
~EmptyResourceTable() = default;
// Returns whether no field is set.
bool IsEmpty() const { return max_ordinal_ == 0; }
// Returns whether the table references unknown fields.
bool HasUnknownData() const;
void _CloseHandles();
// Return a builder that by defaults allocates of an arena.
static ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable> Builder(::fidl::AnyArena& arena);
// Return a builder that relies on explicitly allocating |fidl::ObjectView|s.
static ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable> ExternalBuilder(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>> frame);
#if defined(FIDL_WIRE_ALLOW_DEPRECATED_MUTABLE_TABLES) || false
public:
#else // !defined(FIDL_WIRE_ALLOW_DEPRECATED_MUTABLE_TABLES)
private:
#endif // FIDL_WIRE_ALLOW_DEPRECATED_MUTABLE_TABLES
explicit EmptyResourceTable(::fidl::AnyArena& allocator)
: frame_ptr_(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>(allocator)) {}
// This constructor allows a user controlled allocation (not using a Arena).
// It should only be used when performance is key.
// As soon as the frame is given to the table, it must not be used directly or for another table.
explicit EmptyResourceTable(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>&& frame)
: frame_ptr_(std::move(frame)) {}
void Allocate(::fidl::AnyArena& allocator) {
max_ordinal_ = 0;
frame_ptr_ = ::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>(allocator);
}
void Init(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>&& frame_ptr) {
max_ordinal_ = 0;
frame_ptr_ = std::move(frame_ptr);
}
private:
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable>>;
friend ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable>>;
uint64_t max_ordinal_ = 0;
::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>> frame_ptr_;
};
} // namespace wire
} // namespace test_handlesintypes
template <typename BuilderImpl>
class ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, BuilderImpl> {
protected:
// |Wrapper_Ignore_Me_| wraps a |fidl::ObjectView<T>| and reduces its
// priority in overload resolution. When the user writes `{}` as the
// setter argument, that would default construct the field instead of
// constructing a NULL object view.
template <typename U>
struct Wrapper_Ignore_Me_ {
Wrapper_Ignore_Me_(U v) : value(v) {}
U value;
};
public:
// Build and return the table. The builder should not be used after this.
::test_handlesintypes::wire::EmptyResourceTable Build() {
ZX_DEBUG_ASSERT(table_.frame_ptr_ != nullptr);
::test_handlesintypes::wire::EmptyResourceTable t = std::move(table_);
// Poison this builder to prevent accidental reuse.
table_.frame_ptr_ = nullptr;
return t;
}
protected:
WireTableBaseBuilder(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>&& frame)
: table_(std::move(frame)) {}
private:
::test_handlesintypes::wire::EmptyResourceTable table_;
};
template <>
class ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable> final : public ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable>> {
using Base = ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable>>;
public:
private:
friend class ::test_handlesintypes::wire::EmptyResourceTable;
WireTableBuilder(::fidl::AnyArena& arena)
: Base(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>(arena)),
arena_(arena) {}
[[maybe_unused]] std::reference_wrapper<::fidl::AnyArena> arena_;
};
template <>
class ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable> final : public ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable>> {
using Base = ::fidl::internal::WireTableBaseBuilder<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable>>;
private:
friend class ::test_handlesintypes::wire::EmptyResourceTable;
using Base::Base;
WireTableExternalBuilder(::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>* frame)
: Base(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>>::FromExternal(frame)) {}
};
namespace test_handlesintypes {
namespace wire {
inline ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable> EmptyResourceTable::Builder(::fidl::AnyArena& arena) {
return ::fidl::WireTableBuilder<::test_handlesintypes::wire::EmptyResourceTable>(arena);
}
inline ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable> EmptyResourceTable::ExternalBuilder(::fidl::ObjectView<::fidl::WireTableFrame<::test_handlesintypes::wire::EmptyResourceTable>> frame) {
return ::fidl::WireTableExternalBuilder<::test_handlesintypes::wire::EmptyResourceTable>(std::move(frame));
}
#endif // __Fuchsia__
#ifdef __Fuchsia__
class UnionWithHandle {
public:
UnionWithHandle() : ordinal_(::test_handlesintypes::wire::UnionWithHandle::Ordinal::Invalid), envelope_{} {}
~UnionWithHandle();
UnionWithHandle(UnionWithHandle&& other) {
_Move(std::move(other));
}
UnionWithHandle& operator=(UnionWithHandle&& other) {
if (this != &other) {
_Move(std::move(other));
}
return *this;
}
enum class Tag : fidl_xunion_tag_t {
kH = 1, // 0x1
_do_not_handle_this__write_a_default_case_instead = ::std::numeric_limits<::fidl_union_tag_t>::max(),
};
constexpr bool IsUnknown() const {
return Which() == ::test_handlesintypes::wire::UnionWithHandle::Tag::_do_not_handle_this__write_a_default_case_instead;
}
bool has_invalid_tag() const { return ordinal_ == ::test_handlesintypes::wire::UnionWithHandle::Ordinal::Invalid; }
bool is_h() const { return ordinal_ == ::test_handlesintypes::wire::UnionWithHandle::Ordinal::kH; }
static UnionWithHandle WithH(::zx::vmo val) {
UnionWithHandle result;
result.ordinal_ = ::test_handlesintypes::wire::UnionWithHandle::Ordinal::kH;
result.envelope_.As<::zx::vmo>().set_data(std::move(val));
return result;
}
::zx::vmo& h() {
ZX_ASSERT(ordinal_ == ::test_handlesintypes::wire::UnionWithHandle::Ordinal::kH);
return envelope_.As<::zx::vmo>().get_data();
}
const ::zx::vmo& h() const {
ZX_ASSERT(ordinal_ == ::test_handlesintypes::wire::UnionWithHandle::Ordinal::kH);
return envelope_.As<::zx::vmo>().get_data();
}
::test_handlesintypes::wire::UnionWithHandle::Tag Which() const;
void _CloseHandles();
private:
enum class Ordinal : fidl_xunion_tag_t {
Invalid = 0,
kH = 1, // 0x1
};
void _Move(UnionWithHandle&& other);
static void SizeAndOffsetAssertionHelper();
::test_handlesintypes::wire::UnionWithHandle::Ordinal ordinal_;
FIDL_ALIGNDECL
::fidl::UntypedEnvelope envelope_;
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
class EmptyResourceUnion {
public:
EmptyResourceUnion() : ordinal_(::test_handlesintypes::wire::EmptyResourceUnion::Ordinal::Invalid), envelope_{} {}
~EmptyResourceUnion();
EmptyResourceUnion(EmptyResourceUnion&& other) {
_Move(std::move(other));
}
EmptyResourceUnion& operator=(EmptyResourceUnion&& other) {
if (this != &other) {
_Move(std::move(other));
}
return *this;
}
enum class Tag : fidl_xunion_tag_t {
_do_not_handle_this__write_a_default_case_instead = ::std::numeric_limits<::fidl_union_tag_t>::max(),
};
constexpr bool IsUnknown() const {
return Which() == ::test_handlesintypes::wire::EmptyResourceUnion::Tag::_do_not_handle_this__write_a_default_case_instead;
}
bool has_invalid_tag() const { return ordinal_ == ::test_handlesintypes::wire::EmptyResourceUnion::Ordinal::Invalid; }
::test_handlesintypes::wire::EmptyResourceUnion::Tag Which() const;
void _CloseHandles();
private:
enum class Ordinal : fidl_xunion_tag_t {
Invalid = 0,
};
void _Move(EmptyResourceUnion&& other);
static void SizeAndOffsetAssertionHelper();
::test_handlesintypes::wire::EmptyResourceUnion::Ordinal ordinal_;
FIDL_ALIGNDECL
::fidl::UntypedEnvelope envelope_;
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
struct HandlesInTypes {
::zx::vmo normal_handle = {};
::fidl::VectorView<::zx::vmo> handle_in_vec = {};
::fidl::Array<::zx::vmo, 5> handle_in_array = {};
::fidl::VectorView<::fidl::Array<::zx::vmo, 5>> handle_in_mixed_vec_array = {};
::test_handlesintypes::wire::TableWithHandle table_with_handle = {};
::test_handlesintypes::wire::UnionWithHandle union_with_handle = {};
void _CloseHandles();
};
#endif // __Fuchsia__
} // namespace wire
} // namespace test_handlesintypes
namespace fidl {
template <bool IsRecursive>
struct internal::WireCodingTraits<::test_handlesintypes::wire::ObjType, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive> {
static constexpr size_t kInlineSize = sizeof(uint32_t);
static constexpr bool kIsMemcpyCompatible = false;
static void Encode(internal::WireEncoder* encoder, ::test_handlesintypes::wire::ObjType* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
switch (*value) {
case ::test_handlesintypes::wire::ObjType::kNone:
case ::test_handlesintypes::wire::ObjType::kVmo:
break;
default:
encoder->SetError(::fidl::internal::kCodingErrorUnknownEnumValue);
return;
}
*position.As<::test_handlesintypes::wire::ObjType>() = *value;
}
static void Decode(internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
[[maybe_unused]] ::test_handlesintypes::wire::ObjType value = *position.As<::test_handlesintypes::wire::ObjType>();
switch (value) {
case ::test_handlesintypes::wire::ObjType::kNone:
case ::test_handlesintypes::wire::ObjType::kVmo:
break;
default:
decoder->SetError(::fidl::internal::kCodingErrorUnknownEnumValue);
return;
}
}
};
#ifdef __Fuchsia__
template <>
struct IsResource<::test_handlesintypes::wire::HandlesInTypes> : public std::true_type {};
template <>
struct TypeTraits<::test_handlesintypes::wire::HandlesInTypes> {
static constexpr uint32_t kMaxNumHandles = 4294967295;
static constexpr uint32_t kMaxDepth = 2;
static constexpr uint32_t kPrimarySize = 96;
[[maybe_unused]]
static constexpr uint32_t kMaxOutOfLine = 4294967295;
static constexpr bool kHasFlexibleEnvelope = true;
static constexpr bool kHasPointer = true;
};
template <>
struct IsFidlType<::test_handlesintypes::wire::HandlesInTypes> : public std::true_type {};
template <>
struct IsWire<::test_handlesintypes::wire::HandlesInTypes> : public std::true_type {};
template <>
struct IsStruct<::test_handlesintypes::wire::HandlesInTypes> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test_handlesintypes::wire::HandlesInTypes>);
static_assert(offsetof(::test_handlesintypes::wire::HandlesInTypes, normal_handle) == 0);
static_assert(offsetof(::test_handlesintypes::wire::HandlesInTypes, handle_in_vec) == 8);
static_assert(offsetof(::test_handlesintypes::wire::HandlesInTypes, handle_in_array) == 24);
static_assert(offsetof(::test_handlesintypes::wire::HandlesInTypes, handle_in_mixed_vec_array) == 48);
static_assert(offsetof(::test_handlesintypes::wire::HandlesInTypes, table_with_handle) == 64);
static_assert(offsetof(::test_handlesintypes::wire::HandlesInTypes, union_with_handle) == 80);
static_assert(sizeof(::test_handlesintypes::wire::HandlesInTypes) == TypeTraits<::test_handlesintypes::wire::HandlesInTypes>::kPrimarySize);
template <bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::HandlesInTypes, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive> {
static constexpr size_t kInlineSize = 96;
static constexpr auto kMembers = std::make_tuple(::fidl::internal::WireStructMemberCodingInfo<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>(), ::fidl::internal::WireStructMemberCodingInfo<::fidl::VectorView<::zx::vmo>, fidl::internal::WireCodingConstraintVector<fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, false>, IsRecursive>(), ::fidl::internal::WireStructMemberCodingInfo<::fidl::Array<::zx::vmo, 5>, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>(), ::fidl::internal::WireStructMemberCodingInfo<::fidl::VectorView<::fidl::Array<::zx::vmo, 5>>, fidl::internal::WireCodingConstraintVector<fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, false>, IsRecursive>(), ::fidl::internal::WireStructMemberCodingInfo<::test_handlesintypes::wire::TableWithHandle, fidl::internal::WireCodingConstraintEmpty, IsRecursive>(), ::fidl::internal::WireStructMemberCodingInfo<::test_handlesintypes::wire::UnionWithHandle, fidl::internal::WireCodingConstraintUnion<false>, IsRecursive>());
static constexpr bool kHasPadding = true;
using Base = WireStructCodingTraitsBase<::test_handlesintypes::wire::HandlesInTypes, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive>;
static constexpr bool kIsMemcpyCompatible = Base::kIsMemcpyCompatible;
static void Encode(
internal::WireEncoder* encoder, ::test_handlesintypes::wire::HandlesInTypes* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
if constexpr (kIsMemcpyCompatible) {
memcpy(position.As<void>(), value, sizeof(::test_handlesintypes::wire::HandlesInTypes));
} else {
internal::WireZeroPadding<uint64_t>(encoder, position + 0);
internal::WireZeroPadding<uint64_t>(encoder, position + 40);
internal::WireCodingTraits<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::Encode(encoder, &value->normal_handle, position + 0, recursion_depth);
internal::WireCodingTraits<::fidl::VectorView<::zx::vmo>, fidl::internal::WireCodingConstraintVector<fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, false>, IsRecursive>::Encode(encoder, &value->handle_in_vec, position + 8, recursion_depth);
internal::WireCodingTraits<::fidl::Array<::zx::vmo, 5>, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::Encode(encoder, &value->handle_in_array, position + 24, recursion_depth);
internal::WireCodingTraits<::fidl::VectorView<::fidl::Array<::zx::vmo, 5>>, fidl::internal::WireCodingConstraintVector<fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, false>, IsRecursive>::Encode(encoder, &value->handle_in_mixed_vec_array, position + 48, recursion_depth);
internal::WireCodingTraits<::test_handlesintypes::wire::TableWithHandle, fidl::internal::WireCodingConstraintEmpty, IsRecursive>::Encode(encoder, &value->table_with_handle, position + 64, recursion_depth);
internal::WireCodingTraits<::test_handlesintypes::wire::UnionWithHandle, fidl::internal::WireCodingConstraintUnion<false>, IsRecursive>::Encode(encoder, &value->union_with_handle, position + 80, recursion_depth);
}
}
static void Decode(
internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
if constexpr (!Base::are_members_memcpy_compatible) {
internal::WireCodingTraits<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::Decode(
decoder, position + 0, recursion_depth);
internal::WireCodingTraits<::fidl::VectorView<::zx::vmo>, fidl::internal::WireCodingConstraintVector<fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, false>, IsRecursive>::Decode(
decoder, position + 8, recursion_depth);
internal::WireCodingTraits<::fidl::Array<::zx::vmo, 5>, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::Decode(
decoder, position + 24, recursion_depth);
internal::WireCodingTraits<::fidl::VectorView<::fidl::Array<::zx::vmo, 5>>, fidl::internal::WireCodingConstraintVector<fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, false>, IsRecursive>::Decode(
decoder, position + 48, recursion_depth);
internal::WireCodingTraits<::test_handlesintypes::wire::TableWithHandle, fidl::internal::WireCodingConstraintEmpty, IsRecursive>::Decode(
decoder, position + 64, recursion_depth);
internal::WireCodingTraits<::test_handlesintypes::wire::UnionWithHandle, fidl::internal::WireCodingConstraintUnion<false>, IsRecursive>::Decode(
decoder, position + 80, recursion_depth);
}
internal::WireCheckPadding<uint64_t>(decoder, position + 0, 0xffffffff00000000);
internal::WireCheckPadding<uint64_t>(decoder, position + 40, 0xffffffff00000000);
}
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
template <>
struct IsResource<::test_handlesintypes::wire::EmptyResourceStruct> : public std::true_type {};
template <>
struct TypeTraits<::test_handlesintypes::wire::EmptyResourceStruct> {
static constexpr uint32_t kMaxNumHandles = 0;
static constexpr uint32_t kMaxDepth = 0;
static constexpr uint32_t kPrimarySize = 1;
[[maybe_unused]]
static constexpr uint32_t kMaxOutOfLine = 0;
static constexpr bool kHasFlexibleEnvelope = false;
static constexpr bool kHasPointer = false;
};
template <>
struct IsFidlType<::test_handlesintypes::wire::EmptyResourceStruct> : public std::true_type {};
template <>
struct IsWire<::test_handlesintypes::wire::EmptyResourceStruct> : public std::true_type {};
template <>
struct IsStruct<::test_handlesintypes::wire::EmptyResourceStruct> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test_handlesintypes::wire::EmptyResourceStruct>);
static_assert(offsetof(::test_handlesintypes::wire::EmptyResourceStruct, __reserved) == 0);
static_assert(sizeof(::test_handlesintypes::wire::EmptyResourceStruct) == TypeTraits<::test_handlesintypes::wire::EmptyResourceStruct>::kPrimarySize);
template <bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::EmptyResourceStruct, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive> {
static constexpr size_t kInlineSize = 1;
static constexpr auto kMembers = std::make_tuple(::fidl::internal::WireStructMemberCodingInfo<uint8_t, fidl::internal::WireCodingConstraintEmpty, IsRecursive>());
static constexpr bool kHasPadding = false;
using Base = WireStructCodingTraitsBase<::test_handlesintypes::wire::EmptyResourceStruct, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive>;
static constexpr bool kIsMemcpyCompatible = Base::kIsMemcpyCompatible;
static void Encode(
internal::WireEncoder* encoder, ::test_handlesintypes::wire::EmptyResourceStruct* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
if constexpr (kIsMemcpyCompatible) {
memcpy(position.As<void>(), value, sizeof(::test_handlesintypes::wire::EmptyResourceStruct));
} else {
internal::WireCodingTraits<uint8_t, fidl::internal::WireCodingConstraintEmpty, IsRecursive>::Encode(encoder, &value->__reserved, position + 0, recursion_depth);
}
}
static void Decode(
internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
if constexpr (!Base::are_members_memcpy_compatible) {
internal::WireCodingTraits<uint8_t, fidl::internal::WireCodingConstraintEmpty, IsRecursive>::Decode(
decoder, position + 0, recursion_depth);
}
if (*position.As<uint8_t>() != 0) {
decoder->SetError(kCodingErrorInvalidPaddingBytes);
}
}
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
template <>
struct IsResource<::test_handlesintypes::wire::TableWithHandle> : public std::true_type {};
template <>
struct TypeTraits<::test_handlesintypes::wire::TableWithHandle> {
static constexpr uint32_t kMaxNumHandles = 1;
static constexpr uint32_t kMaxDepth = 2;
static constexpr uint32_t kPrimarySize = 16;
[[maybe_unused]]
static constexpr uint32_t kMaxOutOfLine = 8;
static constexpr bool kHasFlexibleEnvelope = true;
static constexpr bool kHasPointer = true;
};
template <>
struct IsFidlType<::test_handlesintypes::wire::TableWithHandle> : public std::true_type {};
template <>
struct IsWire<::test_handlesintypes::wire::TableWithHandle> : public std::true_type {};
template <>
struct IsTable<::test_handlesintypes::wire::TableWithHandle> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test_handlesintypes::wire::TableWithHandle>);
template <bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::TableWithHandle, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive>
: ::fidl::internal::WireTableCodingTraitsBase<IsRecursive> {
using Base = ::fidl::internal::WireTableCodingTraitsBase<IsRecursive>;
static constexpr size_t kInlineSize = 16;
static constexpr bool kIsMemcpyCompatible = false;
static void Encode(internal::WireEncoder* encoder, ::test_handlesintypes::wire::TableWithHandle* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(encoder, 2);
if (!inner_depth.IsValid()) {
return;
}
::fidl::internal::WirePosition vector_position;
if (Base::PreworkResult::kEarlyExit ==
Base::PrepareForBodyEncode(encoder, value, position, &vector_position)) {
return;
}
fidl_vector_t* vec = reinterpret_cast<fidl_vector_t*>(value);
fidl_envelope_t* envelopes = static_cast<fidl_envelope_t*>(vec->data);
for (size_t i = 0; i < vec->count; i++) {
size_t encode_inline_size = 0;
switch (i) {
case 0:
encode_inline_size = ::fidl::internal::WireCodingTraits<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::kInlineSize;
break;
}
::fidl::internal::EncodeFn<IsRecursive> encode_fn = nullptr;
switch (i) {
case 0:
encode_fn = ::fidl::internal::MakeEncodeFn<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>();
break;
}
WirePosition envelope_position = vector_position + i * sizeof(fidl_envelope_t);
WireEncodeEnvelope(encode_inline_size, encode_fn, encoder, &envelopes[i], envelope_position, inner_depth);
}
}
static void Decode(internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(decoder, 2);
if (!inner_depth.IsValid()) {
return;
}
::fidl::internal::WirePosition vector_position;
if (Base::PreworkResult::kEarlyExit == Base::DecodePrework(decoder, position, &vector_position)) {
return;
}
fidl_vector_t* vec = position.As<fidl_vector_t>();
for (size_t i = 0; i < vec->count; i++) {
size_t decode_inline_size = 0;
switch (i) {
case 0:
decode_inline_size = ::fidl::internal::WireCodingTraits<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::kInlineSize;
break;
}
DecodeFn<IsRecursive> decode_fn = nullptr;
switch (i) {
case 0:
decode_fn = ::fidl::internal::MakeDecodeFn<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>();
break;
}
::fidl::internal::WireDecodeOptionalEnvelope(decode_inline_size, decode_fn, decoder, vector_position + i * sizeof(fidl_envelope_t), inner_depth);
}
}
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
template <>
struct IsResource<::test_handlesintypes::wire::EmptyResourceTable> : public std::true_type {};
template <>
struct TypeTraits<::test_handlesintypes::wire::EmptyResourceTable> {
static constexpr uint32_t kMaxNumHandles = 0;
static constexpr uint32_t kMaxDepth = 1;
static constexpr uint32_t kPrimarySize = 16;
[[maybe_unused]]
static constexpr uint32_t kMaxOutOfLine = 0;
static constexpr bool kHasFlexibleEnvelope = true;
static constexpr bool kHasPointer = true;
};
template <>
struct IsFidlType<::test_handlesintypes::wire::EmptyResourceTable> : public std::true_type {};
template <>
struct IsWire<::test_handlesintypes::wire::EmptyResourceTable> : public std::true_type {};
template <>
struct IsTable<::test_handlesintypes::wire::EmptyResourceTable> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test_handlesintypes::wire::EmptyResourceTable>);
template <bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::EmptyResourceTable, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive>
: ::fidl::internal::WireTableCodingTraitsBase<IsRecursive> {
using Base = ::fidl::internal::WireTableCodingTraitsBase<IsRecursive>;
static constexpr size_t kInlineSize = 16;
static constexpr bool kIsMemcpyCompatible = false;
static void Encode(internal::WireEncoder* encoder, ::test_handlesintypes::wire::EmptyResourceTable* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(encoder, 2);
if (!inner_depth.IsValid()) {
return;
}
::fidl::internal::WirePosition vector_position;
if (Base::PreworkResult::kEarlyExit ==
Base::PrepareForBodyEncode(encoder, value, position, &vector_position)) {
return;
}
fidl_vector_t* vec = reinterpret_cast<fidl_vector_t*>(value);
fidl_envelope_t* envelopes = static_cast<fidl_envelope_t*>(vec->data);
for (size_t i = 0; i < vec->count; i++) {
size_t encode_inline_size = 0;
switch (i) {
}
::fidl::internal::EncodeFn<IsRecursive> encode_fn = nullptr;
switch (i) {
}
WirePosition envelope_position = vector_position + i * sizeof(fidl_envelope_t);
WireEncodeEnvelope(encode_inline_size, encode_fn, encoder, &envelopes[i], envelope_position, inner_depth);
}
}
static void Decode(internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(decoder, 2);
if (!inner_depth.IsValid()) {
return;
}
::fidl::internal::WirePosition vector_position;
if (Base::PreworkResult::kEarlyExit == Base::DecodePrework(decoder, position, &vector_position)) {
return;
}
fidl_vector_t* vec = position.As<fidl_vector_t>();
for (size_t i = 0; i < vec->count; i++) {
size_t decode_inline_size = 0;
switch (i) {
}
DecodeFn<IsRecursive> decode_fn = nullptr;
switch (i) {
}
::fidl::internal::WireDecodeOptionalEnvelope(decode_inline_size, decode_fn, decoder, vector_position + i * sizeof(fidl_envelope_t), inner_depth);
}
}
};
#endif // __Fuchsia__
#ifdef __Fuchsia__
template <>
struct IsResource<::test_handlesintypes::wire::UnionWithHandle> : public std::true_type {};
template <>
struct TypeTraits<::test_handlesintypes::wire::UnionWithHandle> {
static constexpr uint32_t kMaxNumHandles = 1;
static constexpr uint32_t kMaxDepth = 1;
static constexpr uint32_t kPrimarySize = 16;
[[maybe_unused]]
static constexpr uint32_t kMaxOutOfLine = 0;
static constexpr bool kHasFlexibleEnvelope = true;
static constexpr bool kHasPointer = true;
};
template <>
struct IsFidlType<::test_handlesintypes::wire::UnionWithHandle> : public std::true_type {};
template <>
struct IsWire<::test_handlesintypes::wire::UnionWithHandle> : public std::true_type {};
template <>
struct IsUnion<::test_handlesintypes::wire::UnionWithHandle> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test_handlesintypes::wire::UnionWithHandle>);
template <typename Constraint, bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::UnionWithHandle, Constraint, IsRecursive> {
static constexpr size_t kInlineSize = 16;
static constexpr bool kIsMemcpyCompatible = false;
static void Encode(internal::WireEncoder* encoder, ::test_handlesintypes::wire::UnionWithHandle* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
fidl_union_t* u = reinterpret_cast<fidl_union_t*>(value);
if (unlikely(u->tag == 0)) {
if constexpr (Constraint::is_optional) {
*position.As<fidl_union_t>() = {};
return;
}
encoder->SetError(kCodingErrorInvalidUnionTag);
return;
}
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(encoder, 1);
if (!inner_depth.IsValid()) {
return;
}
*position.As<fidl_xunion_tag_t>() = u->tag;
size_t encode_inline_size;
switch (u->tag) {
case 1: // ::test_handlesintypes::wire::UnionWithHandle::Tag::kH
encode_inline_size = ::fidl::internal::WireCodingTraits<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::kInlineSize;
break;
default:
encode_inline_size = 0;
break;
}
::fidl::internal::EncodeFn<IsRecursive> encode_fn;
switch (u->tag) {
case 1: // ::test_handlesintypes::wire::UnionWithHandle::Tag::kH
encode_fn = ::fidl::internal::MakeEncodeFn<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>();
break;
default:
encode_fn = nullptr;
break;
}
WireEncodeEnvelope(encode_inline_size, encode_fn, encoder, &u->envelope, position + sizeof(fidl_xunion_tag_t), inner_depth);
}
static void Decode(internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
::test_handlesintypes::wire::UnionWithHandle::Tag tag = *position.As<::test_handlesintypes::wire::UnionWithHandle::Tag>();
if (unlikely(static_cast<uint64_t>(tag) == 0)) {
if constexpr (!Constraint::is_optional) {
decoder->SetError(kCodingErrorInvalidUnionTag);
return;
}
static_assert(sizeof(fidl_envelope_t) == sizeof(uint64_t));
if (*(position + sizeof(fidl_xunion_tag_t)).As<uint64_t>() != 0) {
decoder->SetError(kCodingErrorZeroTagButNonZeroEnvelope);
}
return;
}
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(decoder, 1);
if (!inner_depth.IsValid()) {
return;
}
size_t decode_inline_size;
switch (tag) {
case ::test_handlesintypes::wire::UnionWithHandle::Tag::kH:
decode_inline_size = ::fidl::internal::WireCodingTraits<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>::kInlineSize;
break;
default:
decode_inline_size = 0;
break;
}
DecodeFn<IsRecursive> decode_fn;
switch (tag) {
case ::test_handlesintypes::wire::UnionWithHandle::Tag::kH:
decode_fn = ::fidl::internal::MakeDecodeFn<::zx::vmo, fidl::internal::WireCodingConstraintHandle<ZX_OBJ_TYPE_VMO, 0x80000000, false>, IsRecursive>();
break;
default:
decode_fn = nullptr;
break;
}
::fidl::internal::WireDecodeFlexibleEnvelope(decode_inline_size, decode_fn, decoder, position + sizeof(fidl_xunion_tag_t), inner_depth);
}
};
// Top-level union.
template <bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::UnionWithHandle, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive>
: public ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::UnionWithHandle, ::fidl::internal::WireCodingConstraintUnion<false>, IsRecursive> {};
#endif // __Fuchsia__
#ifdef __Fuchsia__
template <>
struct IsResource<::test_handlesintypes::wire::EmptyResourceUnion> : public std::true_type {};
template <>
struct TypeTraits<::test_handlesintypes::wire::EmptyResourceUnion> {
static constexpr uint32_t kMaxNumHandles = 0;
static constexpr uint32_t kMaxDepth = 0;
static constexpr uint32_t kPrimarySize = 16;
[[maybe_unused]]
static constexpr uint32_t kMaxOutOfLine = 0;
static constexpr bool kHasFlexibleEnvelope = true;
static constexpr bool kHasPointer = false;
};
template <>
struct IsFidlType<::test_handlesintypes::wire::EmptyResourceUnion> : public std::true_type {};
template <>
struct IsWire<::test_handlesintypes::wire::EmptyResourceUnion> : public std::true_type {};
template <>
struct IsUnion<::test_handlesintypes::wire::EmptyResourceUnion> : public std::true_type {};
static_assert(std::is_standard_layout_v<::test_handlesintypes::wire::EmptyResourceUnion>);
template <typename Constraint, bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::EmptyResourceUnion, Constraint, IsRecursive> {
static constexpr size_t kInlineSize = 16;
static constexpr bool kIsMemcpyCompatible = false;
static void Encode(internal::WireEncoder* encoder, ::test_handlesintypes::wire::EmptyResourceUnion* value, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
fidl_union_t* u = reinterpret_cast<fidl_union_t*>(value);
if (unlikely(u->tag == 0)) {
if constexpr (Constraint::is_optional) {
*position.As<fidl_union_t>() = {};
return;
}
encoder->SetError(kCodingErrorInvalidUnionTag);
return;
}
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(encoder, 1);
if (!inner_depth.IsValid()) {
return;
}
*position.As<fidl_xunion_tag_t>() = u->tag;
size_t encode_inline_size;
switch (u->tag) {
default:
encode_inline_size = 0;
break;
}
::fidl::internal::EncodeFn<IsRecursive> encode_fn;
switch (u->tag) {
default:
encode_fn = nullptr;
break;
}
WireEncodeEnvelope(encode_inline_size, encode_fn, encoder, &u->envelope, position + sizeof(fidl_xunion_tag_t), inner_depth);
}
static void Decode(internal::WireDecoder* decoder, ::fidl::internal::WirePosition position, RecursionDepth<IsRecursive> recursion_depth) {
::test_handlesintypes::wire::EmptyResourceUnion::Tag tag = *position.As<::test_handlesintypes::wire::EmptyResourceUnion::Tag>();
if (unlikely(static_cast<uint64_t>(tag) == 0)) {
if constexpr (!Constraint::is_optional) {
decoder->SetError(kCodingErrorInvalidUnionTag);
return;
}
static_assert(sizeof(fidl_envelope_t) == sizeof(uint64_t));
if (*(position + sizeof(fidl_xunion_tag_t)).As<uint64_t>() != 0) {
decoder->SetError(kCodingErrorZeroTagButNonZeroEnvelope);
}
return;
}
RecursionDepth<IsRecursive> inner_depth = recursion_depth.Add(decoder, 1);
if (!inner_depth.IsValid()) {
return;
}
size_t decode_inline_size;
switch (tag) {
default:
decode_inline_size = 0;
break;
}
DecodeFn<IsRecursive> decode_fn;
switch (tag) {
default:
decode_fn = nullptr;
break;
}
::fidl::internal::WireDecodeFlexibleEnvelope(decode_inline_size, decode_fn, decoder, position + sizeof(fidl_xunion_tag_t), inner_depth);
}
};
// Top-level union.
template <bool IsRecursive>
struct ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::EmptyResourceUnion, ::fidl::internal::WireCodingConstraintEmpty, IsRecursive>
: public ::fidl::internal::WireCodingTraits<::test_handlesintypes::wire::EmptyResourceUnion, ::fidl::internal::WireCodingConstraintUnion<false>, IsRecursive> {};
#endif // __Fuchsia__
#pragma clang diagnostic pop
} // namespace fidl