9#include "QXmppVisitHelper_p.h"
16namespace QXmpp::Private {
20QXmppTask<T> makeReadyTask(T &&value) {
co_return value; }
21inline QXmppTask<void> makeReadyTask() {
co_return; }
24template<
typename Result,
typename Input,
typename Converter>
25auto chain(QXmppTask<Input> &&source, QObject *context, QXmppPromise<Result> &&p, Converter convert)
27 if constexpr (std::is_void_v<Input>) {
28 source.then(context, [p = std::move(p), convert = std::move(convert)]()
mutable {
29 if constexpr (std::is_void_v<Result>) {
37 source.then(context, [p = std::move(p), convert = std::move(convert)](Input &&input)
mutable {
38 if constexpr (std::is_void_v<Result>) {
39 convert(std::move(input));
42 p.finish(convert(std::move(input)));
49template<
typename Result,
typename Input,
typename Converter>
50auto chain(QXmppTask<Input> &&source, QObject *context, Converter convert) -> QXmppTask<Result>
52 QXmppPromise<Result> p;
54 if constexpr (std::is_void_v<Input>) {
55 source.then(context, [p = std::move(p), convert = std::move(convert)]()
mutable {
56 if constexpr (std::is_void_v<Result>) {
64 source.then(context, [p = std::move(p), convert = std::move(convert)](Input &&input)
mutable {
65 if constexpr (std::is_void_v<Result>) {
66 convert(std::move(input));
69 p.
finish(convert(std::move(input)));
77template<
typename IqType,
typename Converter>
78auto parseIq(std::variant<QDomElement, QXmppError> &&sendResult, Converter convert)
80 using Result = std::invoke_result_t<Converter, IqType &&>;
83 [convert = std::move(convert)](
const QDomElement &element) -> Result {
86 return convert(std::move(iq));
88 [](QXmppError &&error) -> Result {
92 std::move(sendResult));
95template<
typename IqType>
96auto parseIq(std::variant<QDomElement, QXmppError> &&sendResult) -> std::variant<IqType, QXmppError>
98 return parseIq<IqType>(std::move(sendResult), [](IqType &&iq) {
99 return std::variant<IqType, QXmppError> { iq };
QXmppTask< T > task()
Definition QXmppTask.h:167
void finish()
Definition QXmppTask.h:184
Definition QXmppError.h:17