aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppFutureUtils_p.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h
index bf8c2f35..2551be67 100644
--- a/src/base/QXmppFutureUtils_p.h
+++ b/src/base/QXmppFutureUtils_p.h
@@ -176,6 +176,21 @@ void reportFinishedResult(QFutureInterface<T> &interface, const T &result)
interface.reportFinished();
}
+template<typename T, typename Err, typename Function>
+auto mapSuccess(std::variant<T, Err> var, Function lambda)
+{
+ using MapResult = std::decay_t<decltype(lambda({}))>;
+ using MappedVariant = std::variant<MapResult, Err>;
+ return std::visit(overloaded {
+ [lambda = std::move(lambda)](T val) -> MappedVariant {
+ return lambda(std::move(val));
+ },
+ [](Err err) -> MappedVariant {
+ return err;
+ } },
+ std::move(var));
+}
+
} // namespace QXmpp::Private
#endif // QXMPPFUTUREUTILS_P_H