]> git.sur5r.net Git - minitube/blob - lib/promises/promise.h
New upstream version 3.9.1
[minitube] / lib / promises / promise.h
1 #ifndef PROMISE_H
2 #define PROMISE_H
3
4 #include <QtCore>
5
6 /// private, don't use directly
7 class BasePromise : public QObject {
8     Q_OBJECT
9
10 public:
11     explicit BasePromise(QObject *parent = nullptr) : QObject(parent) {
12         connect(this, &BasePromise::resolve, this, &QObject::deleteLater);
13         connect(this, &BasePromise::reject, this, &QObject::deleteLater);
14     };
15
16     template <typename Function> BasePromise &then(Function func) {
17         connect(this, &BasePromise::resolve, this, func);
18         return *this;
19     }
20     template <typename Function> BasePromise &onFailed(Function func) {
21         connect(this, &BasePromise::reject, this, func);
22         return *this;
23     }
24     template <typename Function> BasePromise &finally(Function func) {
25         connect(this, &BasePromise::destroyed, this, func);
26         return *this;
27     }
28
29 signals:
30     void resolve();
31     void reject(const QString &message);
32 };
33
34 template <class T> class Promise : public BasePromise {
35 public:
36     void resolve(T value) {
37         data = value;
38         resolve();
39     }
40     T result() const { return data; }
41
42 private:
43     T data;
44 };
45
46 #endif // PROMISE_H