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) {
|