Replaced index-based accessor with type-based one in variant text.
This commit is contained in:
parent
6392af756f
commit
dea62df69b
1 changed files with 20 additions and 18 deletions
|
|
@ -11,16 +11,17 @@ namespace v::text {
|
||||||
rpl::producer<QString> take_plain(
|
rpl::producer<QString> take_plain(
|
||||||
data &&d,
|
data &&d,
|
||||||
rpl::producer<QString> &&fallback) {
|
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);
|
return std::move(fallback);
|
||||||
} else if (const auto plainPtr = std::get_if<1>(&d)) {
|
} else if (const auto ptr = std::get_if<QString>(&d)) {
|
||||||
return rpl::single(base::take(*plainPtr));
|
return rpl::single(base::take(*ptr));
|
||||||
} else if (const auto rplPlainPtr = std::get_if<2>(&d)) {
|
} else if (const auto ptr = std::get_if<rpl::producer<QString>>(&d)) {
|
||||||
return base::take(*rplPlainPtr);
|
return base::take(*ptr);
|
||||||
} else if (const auto markedPtr = std::get_if<3>(&d)) {
|
} else if (const auto ptr = std::get_if<TextWithEntities>(&d)) {
|
||||||
return rpl::single(base::take(*markedPtr).text);
|
return rpl::single(base::take(*ptr).text);
|
||||||
} else if (const auto rplMarkedPtr = std::get_if<4>(&d)) {
|
} else if (const auto ptr = std::get_if<RplMarked>(&d)) {
|
||||||
return base::take(*rplMarkedPtr) | rpl::map([](const auto &marked) {
|
return base::take(*ptr) | rpl::map([](const auto &marked) {
|
||||||
return marked.text;
|
return marked.text;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -30,16 +31,17 @@ rpl::producer<QString> take_plain(
|
||||||
rpl::producer<TextWithEntities> take_marked(
|
rpl::producer<TextWithEntities> take_marked(
|
||||||
data &&d,
|
data &&d,
|
||||||
rpl::producer<TextWithEntities> &&fallback) {
|
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);
|
return std::move(fallback);
|
||||||
} else if (const auto plainPtr = std::get_if<1>(&d)) {
|
} else if (const auto ptr = std::get_if<QString>(&d)) {
|
||||||
return rpl::single(TextWithEntities{ base::take(*plainPtr) });
|
return rpl::single(TextWithEntities{ base::take(*ptr) });
|
||||||
} else if (const auto rplPlainPtr = std::get_if<2>(&d)) {
|
} else if (const auto ptr = std::get_if<rpl::producer<QString>>(&d)) {
|
||||||
return base::take(*rplPlainPtr) | rpl::map(TextWithEntities::Simple);
|
return base::take(*ptr) | rpl::map(TextWithEntities::Simple);
|
||||||
} else if (const auto markedPtr = std::get_if<3>(&d)) {
|
} else if (const auto ptr = std::get_if<TextWithEntities>(&d)) {
|
||||||
return rpl::single(base::take(*markedPtr));
|
return rpl::single(base::take(*ptr));
|
||||||
} else if (const auto rplMarkedPtr = std::get_if<4>(&d)) {
|
} else if (const auto ptr = std::get_if<RplMarked>(&d)) {
|
||||||
return base::take(*rplMarkedPtr);
|
return base::take(*ptr);
|
||||||
}
|
}
|
||||||
Unexpected("Bad variant in take_marked.");
|
Unexpected("Bad variant in take_marked.");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue