// This file is part of Desktop App Toolkit, // a set of libraries for developing nice desktop applications. // // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // #include "ui/text/text_variant.h" namespace v::text { rpl::producer take_plain( data &&d, rpl::producer &&fallback) { using RplMarked = rpl::producer; if (const auto empty = std::get_if(&d)) { return std::move(fallback); } else if (const auto ptr = std::get_if(&d)) { return rpl::single(base::take(*ptr)); } else if (const auto ptr = std::get_if>(&d)) { return base::take(*ptr); } else if (const auto ptr = std::get_if(&d)) { return rpl::single(base::take(*ptr).text); } else if (const auto ptr = std::get_if(&d)) { return base::take(*ptr) | rpl::map([](const auto &marked) { return marked.text; }); } Unexpected("Bad variant in take_plain."); } rpl::producer take_marked( data &&d, rpl::producer &&fallback) { using RplMarked = rpl::producer; if (const auto empty = std::get_if(&d)) { return std::move(fallback); } else if (const auto ptr = std::get_if(&d)) { return rpl::single(TextWithEntities{ base::take(*ptr) }); } else if (const auto ptr = std::get_if>(&d)) { return base::take(*ptr) | rpl::map(TextWithEntities::Simple); } else if (const auto ptr = std::get_if(&d)) { return rpl::single(base::take(*ptr)); } else if (const auto ptr = std::get_if(&d)) { return base::take(*ptr); } Unexpected("Bad variant in take_marked."); } } // namespace v::text