Replaced index-based accessor with type-based one in variant text.

This commit is contained in:
23rd 2022-02-28 11:39:28 +03:00
parent 6392af756f
commit dea62df69b

View file

@ -11,16 +11,17 @@ namespace v::text {
rpl::producer<QString> take_plain(
data &&d,
rpl::producer<QString> &&fallback) {
if (const auto empty = std::get_if<0>(&d)) {
using RplMarked = rpl::producer<TextWithEntities>;
if (const auto empty = std::get_if<v::null_t>(&d)) {
return std::move(fallback);
} else if (const auto plainPtr = std::get_if<1>(&d)) {
return rpl::single(base::take(*plainPtr));
} else if (const auto rplPlainPtr = std::get_if<2>(&d)) {
return base::take(*rplPlainPtr);
} else if (const auto markedPtr = std::get_if<3>(&d)) {
return rpl::single(base::take(*markedPtr).text);
} else if (const auto rplMarkedPtr = std::get_if<4>(&d)) {
return base::take(*rplMarkedPtr) | rpl::map([](const auto &marked) {
} else if (const auto ptr = std::get_if<QString>(&d)) {
return rpl::single(base::take(*ptr));
} else if (const auto ptr = std::get_if<rpl::producer<QString>>(&d)) {
return base::take(*ptr);
} else if (const auto ptr = std::get_if<TextWithEntities>(&d)) {
return rpl::single(base::take(*ptr).text);
} else if (const auto ptr = std::get_if<RplMarked>(&d)) {
return base::take(*ptr) | rpl::map([](const auto &marked) {
return marked.text;
});
}
@ -30,16 +31,17 @@ rpl::producer<QString> take_plain(
rpl::producer<TextWithEntities> take_marked(
data &&d,
rpl::producer<TextWithEntities> &&fallback) {
if (const auto empty = std::get_if<0>(&d)) {
using RplMarked = rpl::producer<TextWithEntities>;
if (const auto empty = std::get_if<v::null_t>(&d)) {
return std::move(fallback);
} else if (const auto plainPtr = std::get_if<1>(&d)) {
return rpl::single(TextWithEntities{ base::take(*plainPtr) });
} else if (const auto rplPlainPtr = std::get_if<2>(&d)) {
return base::take(*rplPlainPtr) | rpl::map(TextWithEntities::Simple);
} else if (const auto markedPtr = std::get_if<3>(&d)) {
return rpl::single(base::take(*markedPtr));
} else if (const auto rplMarkedPtr = std::get_if<4>(&d)) {
return base::take(*rplMarkedPtr);
} else if (const auto ptr = std::get_if<QString>(&d)) {
return rpl::single(TextWithEntities{ base::take(*ptr) });
} else if (const auto ptr = std::get_if<rpl::producer<QString>>(&d)) {
return base::take(*ptr) | rpl::map(TextWithEntities::Simple);
} else if (const auto ptr = std::get_if<TextWithEntities>(&d)) {
return rpl::single(base::take(*ptr));
} else if (const auto ptr = std::get_if<RplMarked>(&d)) {
return base::take(*ptr);
}
Unexpected("Bad variant in take_marked.");
}