KanoopCommonQt 2.1.1
Kanoop foundational Qt utility library
Loading...
Searching...
No Matches
iserializabletojson.h
1/**
2 * @brief Interfaces for serializing objects to JSON.
3 */
4#ifndef ISERIALIZABLETOJSON_H
5#define ISERIALIZABLETOJSON_H
6
7#include <QByteArray>
8#include <QJsonArray>
9#include <QJsonObject>
10#include <Kanoop/kanoopcommon.h>
11
12/**
13 * @brief Interface for objects that can serialize themselves to a raw JSON byte array.
14 */
15class KANOOP_EXPORT ISerializableToJson
16{
17public:
18 /**
19 * @brief Serialize this object to a JSON byte array.
20 * @return UTF-8 encoded JSON representation
21 */
22 virtual QByteArray serializeToJson() const = 0;
23};
24
25/**
26 * @brief Interface for objects that can serialize themselves into a QJsonObject, with JSON helper utilities.
27 */
28class KANOOP_EXPORT ISerializableToJsonObject
29{
30public:
31 /**
32 * @brief Serialize this object into a QJsonObject.
33 * @return JSON object representation of this object
34 */
35 virtual QJsonObject serializeToJsonObject() const = 0;
36
37protected:
38 /**
39 * @brief Return a UUID as a JSON string, or null if uuid is null.
40 * @param uuid UUID to convert
41 * @return JSON string value, or QJsonValue::Null
42 */
43 static QJsonValue uuidOrNull(const QUuid& uuid);
44 /**
45 * @brief Return a string as a JSON string, or null if value is empty.
46 * @param value String to convert
47 * @return JSON string value, or QJsonValue::Null
48 */
49 static QJsonValue stringOrNull(const QString& value);
50 /**
51 * @brief Return a QVariant integer as a JSON integer, or null if variant is null.
52 * @param value Variant containing an integer
53 * @return JSON integer value, or QJsonValue::Null
54 */
55 static QJsonValue intOrNull(const QVariant& value);
56 /**
57 * @brief Return a QVariant double as a JSON double, or null if variant is null.
58 * @param value Variant containing a double
59 * @return JSON double value, or QJsonValue::Null
60 */
61 static QJsonValue doubleOrNull(const QVariant& value);
62 /**
63 * @brief Return a QVariant double formatted as a JSON string, or null if variant is null.
64 * @param value Variant containing a double
65 * @param precision Number of decimal places (default 6)
66 * @return JSON string value, or QJsonValue::Null
67 */
68 static QJsonValue doubleStringOrNull(const QVariant& value, int precision = 6);
69 /**
70 * @brief Return a string list as a JSON array, or null if list is empty.
71 * @param value String list to convert
72 * @return JSON array value, or QJsonValue::Null
73 */
74 static QJsonValue arrayOrNull(const QStringList& value);
75 /**
76 * @brief Extract an integer QVariant from a JSON value, or invalid QVariant if null.
77 * @param value JSON value to extract from
78 * @return QVariant containing an integer, or an invalid QVariant
79 */
80 static QVariant intOrNull(const QJsonValue& value);
81 /**
82 * @brief Extract a double QVariant from a JSON value, or invalid QVariant if null.
83 * @param value JSON value to extract from
84 * @return QVariant containing a double, or an invalid QVariant
85 */
86 static QVariant doubleOrNull(const QJsonValue& value);
87 /**
88 * @brief Parse a double from a JSON string value, or invalid QVariant if null.
89 * @param value JSON value to parse
90 * @param precision Number of decimal places (default 6)
91 * @return QVariant containing a double, or an invalid QVariant
92 */
93 static QVariant doubleStringOrNull(const QJsonValue& value, int precision = 6);
94};
95
96/**
97 * @brief Interface for objects that can serialize into an existing QJsonObject (in-place variant).
98 */
99class KANOOP_EXPORT ISerializableIntoJsonObject
100{
101public:
102 /**
103 * @brief Write this object's fields into an existing QJsonObject.
104 * @param object JSON object to populate
105 */
106 virtual void serializeIntoJsonObject(QJsonObject& object) const = 0;
107
108protected:
109 /**
110 * @brief Return a UUID as a JSON string, or null if uuid is null.
111 * @param uuid UUID to convert
112 * @return JSON string value, or QJsonValue::Null
113 */
114 static QJsonValue uuidOrNull(const QUuid& uuid);
115 /**
116 * @brief Return a string as a JSON string, or null if value is empty.
117 * @param value String to convert
118 * @return JSON string value, or QJsonValue::Null
119 */
120 static QJsonValue stringOrNull(const QString& value);
121 /**
122 * @brief Return a QVariant integer as a JSON integer, or null if variant is null.
123 * @param value Variant containing an integer
124 * @return JSON integer value, or QJsonValue::Null
125 */
126 static QJsonValue intOrNull(const QVariant& value);
127 /**
128 * @brief Return a QVariant double as a JSON double, or null if variant is null.
129 * @param value Variant containing a double
130 * @return JSON double value, or QJsonValue::Null
131 */
132 static QJsonValue doubleOrNull(const QVariant& value);
133 /**
134 * @brief Return a QVariant double formatted as a JSON string, or null if variant is null.
135 * @param value Variant containing a double
136 * @param precision Number of decimal places (default 6)
137 * @return JSON string value, or QJsonValue::Null
138 */
139 static QJsonValue doubleStringOrNull(const QVariant& value, int precision = 6);
140 /**
141 * @brief Return a string list as a JSON array, or null if list is empty.
142 * @param value String list to convert
143 * @return JSON array value, or QJsonValue::Null
144 */
145 static QJsonValue arrayOrNull(const QStringList& value);
146 /**
147 * @brief Extract an integer QVariant from a JSON value, or invalid QVariant if null.
148 * @param value JSON value to extract from
149 * @return QVariant containing an integer, or an invalid QVariant
150 */
151 static QVariant intOrNull(const QJsonValue& value);
152 /**
153 * @brief Extract a double QVariant from a JSON value, or invalid QVariant if null.
154 * @param value JSON value to extract from
155 * @return QVariant containing a double, or an invalid QVariant
156 */
157 static QVariant doubleOrNull(const QJsonValue& value);
158 /**
159 * @brief Parse a double from a JSON string value, or invalid QVariant if null.
160 * @param value JSON value to parse
161 * @param precision Number of decimal places (default 6)
162 * @return QVariant containing a double, or an invalid QVariant
163 */
164 static QVariant doubleStringOrNull(const QJsonValue& value, int precision = 6);
165};
166
167/**
168 * @brief Interface for objects that can serialize themselves to a QJsonArray.
169 */
170class KANOOP_EXPORT ISerializableToJsonArray
171{
172public:
173 /**
174 * @brief Serialize this object into a QJsonArray.
175 * @return JSON array representation of this object
176 */
177 virtual QJsonArray serializeToJsonArray() const = 0;
178};
179
180#endif // ISERIALIZABLETOJSON_H
Interface for objects that can serialize into an existing QJsonObject (in-place variant).
static QVariant doubleStringOrNull(const QJsonValue &value, int precision=6)
Parse a double from a JSON string value, or invalid QVariant if null.
static QJsonValue stringOrNull(const QString &value)
Return a string as a JSON string, or null if value is empty.
static QVariant intOrNull(const QJsonValue &value)
Extract an integer QVariant from a JSON value, or invalid QVariant if null.
static QJsonValue intOrNull(const QVariant &value)
Return a QVariant integer as a JSON integer, or null if variant is null.
static QJsonValue uuidOrNull(const QUuid &uuid)
Return a UUID as a JSON string, or null if uuid is null.
static QJsonValue doubleOrNull(const QVariant &value)
Return a QVariant double as a JSON double, or null if variant is null.
static QJsonValue doubleStringOrNull(const QVariant &value, int precision=6)
Return a QVariant double formatted as a JSON string, or null if variant is null.
static QVariant doubleOrNull(const QJsonValue &value)
Extract a double QVariant from a JSON value, or invalid QVariant if null.
virtual void serializeIntoJsonObject(QJsonObject &object) const =0
Write this object's fields into an existing QJsonObject.
static QJsonValue arrayOrNull(const QStringList &value)
Return a string list as a JSON array, or null if list is empty.
Interface for objects that can serialize themselves to a QJsonArray.
virtual QJsonArray serializeToJsonArray() const =0
Serialize this object into a QJsonArray.
Interface for objects that can serialize themselves into a QJsonObject, with JSON helper utilities.
virtual QJsonObject serializeToJsonObject() const =0
Serialize this object into a QJsonObject.
static QJsonValue doubleOrNull(const QVariant &value)
Return a QVariant double as a JSON double, or null if variant is null.
static QVariant intOrNull(const QJsonValue &value)
Extract an integer QVariant from a JSON value, or invalid QVariant if null.
static QJsonValue arrayOrNull(const QStringList &value)
Return a string list as a JSON array, or null if list is empty.
static QJsonValue intOrNull(const QVariant &value)
Return a QVariant integer as a JSON integer, or null if variant is null.
static QJsonValue uuidOrNull(const QUuid &uuid)
Return a UUID as a JSON string, or null if uuid is null.
static QJsonValue stringOrNull(const QString &value)
Return a string as a JSON string, or null if value is empty.
static QVariant doubleOrNull(const QJsonValue &value)
Extract a double QVariant from a JSON value, or invalid QVariant if null.
static QJsonValue doubleStringOrNull(const QVariant &value, int precision=6)
Return a QVariant double formatted as a JSON string, or null if variant is null.
static QVariant doubleStringOrNull(const QJsonValue &value, int precision=6)
Parse a double from a JSON string value, or invalid QVariant if null.
Interfaces for serializing objects to JSON.
virtual QByteArray serializeToJson() const =0
Serialize this object to a JSON byte array.