summaryrefslogtreecommitdiff
path: root/databases/cutelyst-asql/files/patch-src_acoroexpected.h
blob: c5117a871c87fe38d51bfb1ae7327d02cadc05ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
--- src/acoroexpected.h.orig	2024-11-11 20:32:28 UTC
+++ src/acoroexpected.h
@@ -3,6 +3,9 @@
 #include <adatabase.h>
 #include <aresult.h>
 #include <asqlexports.h>
+#include <atransaction.h>
+
+#include <concepts>
 #include <coroutine>
 #include <expected>
 
@@ -34,7 +37,7 @@ class ASQL_EXPORT ACoroExpected (public)
 
     std::expected<T, QString> await_resume() { return m_result; }
 
-    ACoroExpected(QObject *receiver)
+    ACoroExpected(QObject *receiver) requires (std::same_as<T, ATransaction>)
         : m_receiver(receiver)
         , m_result{std::unexpected(QString{})}
     {
@@ -42,11 +45,24 @@ class ASQL_EXPORT ACoroExpected (public)
             if (result.error()) {
                 m_result = std::unexpected(result.errorString());
             } else {
-                if constexpr (std::is_same_v<T, ATransaction>) {
-                    m_result = ATransaction(database, true);
-                } else {
-                    m_result = result;
-                }
+                m_result = ATransaction(database, true);
+            }
+
+            if (m_handle) {
+                m_handle.resume();
+            }
+        };
+    }
+
+    ACoroExpected(QObject *receiver) requires (!std::same_as<T, ATransaction>)
+        : m_receiver(receiver)
+        , m_result{std::unexpected(QString{})}
+    {
+        callback = [this](AResult &result) {
+            if (result.error()) {
+                m_result = std::unexpected(result.errorString());
+            } else {
+                m_result = result;
             }
 
             if (m_handle) {