blob: 070344e443e3db53dbe84362514d3e3c3e941766 [file] [log] [blame]
// WARNING: This file is machine generated by fidlgen.
#pragma once
#include <fidl/test.versions/cpp/common_types.h>
#include <fidl/test.versions/cpp/markers.h>
#include <lib/fidl/cpp/natural_coding_traits.h>
#include <lib/fidl/cpp/natural_types.h>
#include <cinttypes>
#include <string>
#ifdef __Fuchsia__
#include <lib/zx/channel.h>
#endif // __Fuchsia__
namespace test_versions {
class Struct;
class Table;
class Union;
extern "C" const fidl_type_t test_versions_UnionTable;
class Union {
private:
using Storage_ = std::variant<std::monostate, uint32_t>;
public:
// TODO: share union tag types between wire & natural.
enum class Tag : fidl_union_tag_t {
kX = 1, // 0x1
kUnknown = ::std::numeric_limits<::fidl_union_tag_t>::max(),
};
// Create an unknown value of this union.
Union() : storage_(std::make_shared<Storage_>()) {}
Union(Union&& other) noexcept
: Union(::fidl::internal::DefaultConstructPossiblyInvalidObjectTag{}) {
*storage_ = std::move(*other.storage_);
}
Union& operator=(Union&& other) noexcept {
if (this != &other) {
*storage_ = std::move(*other.storage_);
}
return *this;
}
Union(const Union& other) noexcept : Union(other.CloneStorage_()) {}
Union& operator=(const Union& other) noexcept {
if (this != &other) {
storage_ = other.CloneStorage_();
}
return *this;
}
bool operator==(const Union& other) const noexcept {
return *storage_ == *other.storage_;
}
bool operator!=(const Union& other) const noexcept {
return *storage_ != *other.storage_;
}
constexpr ::test_versions::Union::Tag Which() const {
return Union::IndexToTag(storage_->index()).value();
}
static Union WithX(uint32_t val) {
return Union(
std::make_shared<Storage_>(std::in_place_index_t<1>{}, std::move(val)));
}
const ::fidl::internal::UnionMemberView<1, Storage_> x() const {
return ::fidl::internal::UnionMemberView<1, Storage_>(storage_);
}
::fidl::internal::UnionMemberView<1, Storage_> x() {
return ::fidl::internal::UnionMemberView<1, Storage_>(storage_);
}
Union(::fidl::internal::DefaultConstructPossiblyInvalidObjectTag)
: storage_(std::make_shared<Storage_>()) {}
private:
std::shared_ptr<Storage_> storage_;
std::shared_ptr<Storage_> CloneStorage_() const;
friend struct ::fidl::internal::NaturalUnionCodingTraits<
::test_versions::Union>;
static constexpr auto kMembers =
std::make_tuple(::fidl::internal::NaturalUnionMember<
::fidl::internal::NaturalCodingConstraintEmpty>(),
::fidl::internal::NaturalUnionMember<
fidl::internal::NaturalCodingConstraintEmpty>());
explicit Union(std::shared_ptr<Storage_> storage)
: storage_(std::move(storage)) {}
static constexpr size_t TagToIndex(::fidl::internal::NaturalDecoder* decoder,
::test_versions::Union::Tag tag) {
switch (tag) {
case ::test_versions::Union::Tag::kX:
return 1;
case ::test_versions::Union::Tag::kUnknown:
return 0;
default: {
decoder->SetError(::fidl::internal::kCodingErrorUnknownUnionTag);
return 0;
}
}
}
static constexpr std::optional<::test_versions::Union::Tag> IndexToTag(
size_t index) {
switch (index) {
case 1:
return ::test_versions::Union::Tag::kX;
default:
return ::test_versions::Union::Tag::kUnknown;
}
}
};
extern "C" const fidl_type_t test_versions_TableTable;
class Table {
private:
struct Storage_;
public:
Table(Storage_ storage) noexcept : storage_(std::move(storage)) {}
Table() noexcept = default;
Table(Table&&) noexcept = default;
Table& operator=(Table&&) noexcept = default;
Table(const Table& other) noexcept : Table(other.CloneStorage_()) {}
Table& operator=(const Table& other) noexcept {
storage_ = other.CloneStorage_();
return *this;
}
bool operator==(const Table& other) const noexcept {
return ::fidl::internal::NaturalTableCodingTraits<
::test_versions::Table>::Equal(this, &other);
}
bool operator!=(const Table& other) const noexcept {
return !::fidl::internal::NaturalTableCodingTraits<
::test_versions::Table>::Equal(this, &other);
}
bool IsEmpty() const { return !(storage_.x.has_value()); }
const std::optional<uint32_t>& x() const { return storage_.x; }
::std::optional<uint32_t>& x() { return storage_.x; }
Table(::fidl::internal::DefaultConstructPossiblyInvalidObjectTag)
: Table(Storage_{}) {}
private:
struct Storage_ final {
::std::optional<uint32_t> x{};
};
// TODO(https://fxbug.dev/91252): Box the storage.
Storage_ storage_;
Storage_ CloneStorage_() const;
friend struct ::fidl::internal::NaturalTableCodingTraits<
::test_versions::Table>;
friend struct ::fidl::internal::MemberVisitor<::test_versions::Table>;
static constexpr auto kMembers = std::make_tuple(
::fidl::internal::NaturalTableMember<
Storage_, uint32_t, fidl::internal::NaturalCodingConstraintEmpty>{
1, &Storage_::x});
};
extern "C" const fidl_type_t test_versions_StructTable;
class Struct {
private:
struct Storage_;
public:
Struct(Storage_ storage) noexcept : storage_(std::move(storage)) {}
Struct(uint32_t x) noexcept : storage_({.x = std::move(x)}) {}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
// Default constructs a |Struct| only if all of its members are default
// constructible.
Struct() = default;
#pragma clang diagnostic pop
Struct(Struct&&) noexcept = default;
Struct& operator=(Struct&&) noexcept = default;
Struct(const Struct& other) noexcept : Struct(other.CloneStorage_()) {}
Struct& operator=(const Struct& other) noexcept {
storage_ = other.CloneStorage_();
return *this;
}
bool operator==(const Struct& other) const noexcept {
return ::fidl::internal::NaturalStructCodingTraits<::test_versions::Struct,
4>::Equal(this, &other);
}
bool operator!=(const Struct& other) const noexcept {
return !::fidl::internal::NaturalStructCodingTraits<::test_versions::Struct,
4>::Equal(this, &other);
}
uint32_t x() const { return storage_.x; }
uint32_t& x() { return storage_.x; }
Struct(::fidl::internal::DefaultConstructPossiblyInvalidObjectTag)
: Struct(Storage_{
.x = {},
}) {}
private:
struct Storage_ final {
uint32_t x = {};
};
Storage_ storage_;
Storage_ CloneStorage_() const;
friend struct ::fidl::internal::NaturalStructCodingTraits<
::test_versions::Struct, 4>;
friend struct ::fidl::internal::MemberVisitor<::test_versions::Struct>;
static constexpr auto kMembers = std::make_tuple(
::fidl::internal::NaturalStructMember<
Storage_, uint32_t, fidl::internal::NaturalCodingConstraintEmpty>{
&Storage_::x, 0});
static constexpr auto kPadding = std::make_tuple();
};
constexpr uint32_t kConst = 0u;
constexpr bool kAddedAtHead = true;
} // namespace test_versions
namespace fidl {
extern "C" const fidl_type_t test_versions_StructTable;
template <>
struct IsFidlType<::test_versions::Struct> : public std::true_type {};
template <>
struct ::fidl::internal::TypeTraits<::test_versions::Struct> final {
public:
static constexpr const fidl_type_t* kCodingTable = &test_versions_StructTable;
};
template <>
struct internal::NaturalCodingTraits<
::test_versions::Struct, ::fidl::internal::NaturalCodingConstraintEmpty>
final : public ::fidl::internal::NaturalStructCodingTraits<
::test_versions::Struct, 4> {};
extern "C" const fidl_type_t test_versions_TableTable;
template <>
struct IsFidlType<::test_versions::Table> : public std::true_type {};
template <>
struct ::fidl::internal::TypeTraits<::test_versions::Table> final {
public:
static constexpr const fidl_type_t* kCodingTable = &test_versions_TableTable;
};
template <>
struct internal::NaturalCodingTraits<
::test_versions::Table, ::fidl::internal::NaturalCodingConstraintEmpty>
: public ::fidl::internal::NaturalTableCodingTraits<
::test_versions::Table> {};
extern "C" const fidl_type_t test_versions_UnionTable;
template <>
struct IsFidlType<::test_versions::Union> : public std::true_type {};
template <>
struct IsUnion<::test_versions::Union> : public std::true_type {};
template <>
struct ::fidl::internal::TypeTraits<::test_versions::Union> final {
public:
static constexpr const fidl_type_t* kCodingTable = &test_versions_UnionTable;
};
template <>
struct internal::NaturalCodingTraits<
::test_versions::Union, ::fidl::internal::NaturalCodingConstraintEmpty>
final : public ::fidl::internal::NaturalUnionCodingTraits<
::test_versions::Union> {};
template <>
struct internal::NaturalCodingTraits<
::test_versions::Bits, ::fidl::internal::NaturalCodingConstraintEmpty> {
static constexpr size_t inline_size_v2 = sizeof(uint32_t);
static constexpr bool is_memcpy_compatible = true;
static void Encode(internal::NaturalEncoder* encoder,
::test_versions::Bits* value, size_t offset,
size_t recursion_depth) {
*encoder->template GetPtr<::test_versions::Bits>(offset) = *value;
}
static void Decode(internal::NaturalDecoder* decoder,
::test_versions::Bits* value, size_t offset,
size_t recursion_depth) {
*value = *decoder->template GetPtr<::test_versions::Bits>(offset);
}
};
template <>
struct internal::NaturalCodingTraits<
::test_versions::Enum, ::fidl::internal::NaturalCodingConstraintEmpty> {
static constexpr size_t inline_size_v2 = sizeof(uint32_t);
static constexpr bool is_memcpy_compatible = true;
static void Encode(internal::NaturalEncoder* encoder,
::test_versions::Enum* value, size_t offset,
size_t recursion_depth) {
*encoder->template GetPtr<::test_versions::Enum>(offset) = *value;
}
static void Decode(internal::NaturalDecoder* decoder,
::test_versions::Enum* value, size_t offset,
size_t recursion_depth) {
*value = *decoder->template GetPtr<::test_versions::Enum>(offset);
}
};
} // namespace fidl