kDB: Knowledge DataBase
Loading...
Searching...
No Matches
ag.h
1#include <ag/qt.h>
2#include <knowCore/Value.h>
3
4namespace ag
5{
6 template<typename _T_>
7 requires(knowCore::HasMetaTypeInformationV<_T_> and not std::is_same_v<_T_, QString>)
8 struct TypeSupport<_T_, false>
9 {
10 static void hash(QCryptographicHash* _hash, const _T_& _t)
11 {
12 _hash->addData(knowCore::Value::fromValue(_t).md5().expect_success());
13 }
14 static _T_ init() { return _T_(); }
15 static void clean(_T_* _t) { *_t = _T_(); }
16 static _T_ clone(const _T_ _t) { return _t; }
17 };
18
19 template<typename _T_>
20 requires(knowCore::HasMetaTypeInformationV<_T_> and not std::is_same_v<_T_, QString>)
21 struct SerialisationSupport<_T_, false>
22 {
23 static QJsonValue toJson(const _T_& _t)
24 {
25 return knowCore::Value::fromValue(_t).toJsonValue().expect_success();
26 }
27 static bool fromJson(_T_* _t, const QJsonValue& _value, QString* _errorMessage)
28 {
29 auto const [success, value, error]
30 = knowCore::Value::fromJsonValue(knowCore::MetaTypeInformation<_T_>::uri(), _value);
31 if(success)
32 {
33 auto const [success_value, value_t, error_value] = value.value().template value<_T_>();
34 if(success_value)
35 {
36 *_t = value_t.value();
37 return true;
38 }
39 else
40 {
41 *_errorMessage = error_value.value().get_message();
42 return false;
43 }
44 }
45 else
46 {
47 *_errorMessage = error.value().get_message();
48 return false;
49 }
50 }
51 static QCborValue toCbor(const _T_ _t)
52 {
53 return knowCore::Value::fromValue(_t).toCborValue().expect_success();
54 }
55 static bool fromCbor(_T_* _t, const QCborValue& _value, QString* _errorMessage)
56 {
57 auto const [success, value, error]
58 = knowCore::Value::fromCborValue(knowCore::MetaTypeInformation<_T_>::uri(), _value);
59 if(success)
60 {
61 auto const [success_value, value_t, error_value] = value.value().template value<_T_>();
62 if(success_value)
63 {
64 *_t = value_t.value();
65 return true;
66 }
67 else
68 {
69 *_errorMessage = error_value.value().get_message();
70 return false;
71 }
72 }
73 else
74 {
75 *_errorMessage = error.value().get_message();
76 return false;
77 }
78 }
79 };
80
81} // namespace ag
Definition MetaType.h:66
static Value fromValue(const _T_ &_value)
Definition Value.h:241