knowL: Knowledge Libraries
Loading...
Searching...
No Matches
Values.h
1#pragma once
2
3#include <knowCore/ObjectSharedRef.h>
4#include <knowCore/TypeDefinitions.h>
5#include <knowValues/ValuesDef.h>
6
7#include "Forward.h"
8
9namespace knowValues::Values
10{
11 namespace details
12 {
13 template<typename _T_>
14 class Value : public knowCore::ObjectSharedRef<_T_>
15 {
16 public:
17 using Builder = typename _T_::Builder;
18 public:
19 using Definition = _T_;
20 Value(_T_* _t = nullptr) : knowCore::ObjectSharedRef<_T_>(_t, true) {}
22 Value(const Value& _rhs) : knowCore::ObjectSharedRef<_T_>(_rhs) {}
23 Value& operator=(const Value& _rhs)
24 {
26 return *this;
27 }
28 Value(Builder&& _builder) : Value((_T_*)(_builder)) {}
29 static Builder create() { return _T_::create(); }
30 public:
31 static cres_qresult<Value<_T_>> fromJsonValue(const QJsonValue& _value)
32 {
33 QString errMsg;
34 Value value = Value(Definition::fromJson(_value.toObject(), &errMsg));
35 if(value)
36 {
37 return cres_success(value);
38 }
39 else
40 {
41 return cres_failure("Failed to parse from Json: {}", errMsg);
42 }
43 }
44 static cres_qresult<Value<_T_>> fromCborValue(const QCborValue& _value)
45 {
46 QString errMsg;
47 Value value = Value(Definition::fromCbor(_value.toMap(), &errMsg));
48 if(value)
49 {
50 return cres_success(value);
51 }
52 else
53 {
54 return cres_failure("Failed to parse from Cbor: {}", errMsg);
55 }
56 }
57 };
58 template<>
59 class Value<Definitions::Value> : public knowCore::ObjectSharedRef<Definitions::Value>
60 {
61 public:
62 using Definition = Definitions::Value;
63 Value(Definitions::Value* _t = nullptr)
65 {
66 }
69 {
70 }
72 Value& operator=(const Value& _rhs)
73 {
75 return *this;
76 }
77 public:
78 static cres_qresult<Value<Definitions::Value>> fromJsonValue(const QJsonValue& _value)
79 {
80 QString errMsg;
81 Value value = Value(Definition::fromJson(_value.toObject(), &errMsg));
82 if(value)
83 {
84 return cres_success(value);
85 }
86 else
87 {
88 return cres_failure("Failed to parse from Json: {}", errMsg);
89 }
90 }
91 static cres_qresult<Value<Definitions::Value>> fromCborValue(const QCborValue& _value)
92 {
93 QString errMsg;
94 Value value = Value(Definition::fromCbor(_value.toMap(), &errMsg));
95 if(value)
96 {
97 return cres_success(value);
98 }
99 else
100 {
101 return cres_failure("Failed to parse from Cbor: {}", errMsg);
102 }
103 }
104 };
105 } // namespace details
106} // namespace knowValues::Values
107
108#define __KNOWVALUES_DECLARE_VALUE(_VALUE_, _I_) \
109 KNOWCORE_DECLARE_FULL_METATYPE(knowValues::Values, _VALUE_);
110
111#define __KNOWVALUES_DECLARE_VALUES(...) KNOWCORE_FOREACH(__KNOWVALUES_DECLARE_VALUE, __VA_ARGS__)
112
113__KNOWVALUES_DECLARE_VALUES(KNOWVALUES_VALUES_LIST)
114
115#undef __KNOWVALUES_DECLARE_VALUES
116#undef __KNOWVALUES_DECLARE_VALUE
Definition SharedRef.h:23