18#if !defined(TAGVAL_WITH_PARCEL)
19#if __has_include(<parcel/parcel.h>)
20#define TAGVAL_WITH_PARCEL 1
22#define TAGVAL_WITH_PARCEL 0
36#include <parcel/parcel.h>
40template <
typename TagT>
41 requires std::derived_from<TagT, detail::TagValBaseTag>
42class TagValCell :
public ::parcel::BaseCell<TagValCell<TagT>, TagT> {
43 using base_t = ::parcel::BaseCell<TagValCell<TagT>, TagT>;
47 using base_t::operator=;
49 static constexpr std::string_view
kind_id =
"tagval";
51 [[nodiscard]] std::string
to_string()
const override {
52 return std::string{this->value.code()};
55 static ::parcel::cell_t
from_json(::parcel::json_t
const& j, ::parcel::ParcelRegistry
const&) {
56 auto v = base_t::template cell_from_json<TagT>(j,
kind_id);
57 auto cell = std::make_shared<TagValCell>(v);
58 base_t::absorb_display_info(j, cell);
68 static const auto d = [] {
69 constexpr auto kd = TagT::descriptor();
70 ::parcel::DisplayInfo info{};
71 info.name =
"tagval::TagVal";
76 info.color = *kd.color;
78 return std::make_shared<::parcel::SimpleCellTypeDescriptor<TagValCell>>(info);
CRTP HandleBase used by ClosedEnded and OpenEnded.
static constexpr std::string_view kind_id
Definition parcel.hpp:49
::parcel::cell_type_descriptor_t descriptor()
Definition parcel.hpp:62
std::string to_string() const override
Definition parcel.hpp:51
::parcel::cell_t from_json(::parcel::json_t const &j, ::parcel::ParcelRegistry const &)
Definition parcel.hpp:55
Optional nlohmann::json integration.