diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 15 |
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 |
