diff --git a/src/blackmisc/valueobject.h b/src/blackmisc/valueobject.h index 6acf2399e..9be6bc705 100644 --- a/src/blackmisc/valueobject.h +++ b/src/blackmisc/valueobject.h @@ -8,6 +8,9 @@ #include #include #include +#include +#include +#include #include #include @@ -196,6 +199,18 @@ namespace BlackMisc */ virtual QVariant toQVariant() const = 0; + /*! + * \brief Contribute to JSON object + * \return updated JSON object + */ + virtual QJsonObject toJson() const { QJsonObject json; return json;} + + /*! + * \brief Initialize from JSOn object + * \param json + */ + virtual void fromJson(const QJsonObject &json) { Q_UNUSED(json); } + /*! * \brief As icon, not implement by all classes * \return @@ -334,6 +349,67 @@ namespace BlackMisc return argument << static_cast(valueObject); } + /*! + * \brief Non member, non friend operator >> for JSON + * \param json + * \param valueObject + * \return + */ + inline const QJsonObject &operator>>(const QJsonObject &json, CValueObject &valueObject) + { + valueObject.fromJson(json); + return json; + } + + /*! + * \brief Non member, non friend operator >> for JSON + * \param json + * \param valueObject + * \return + */ + inline const QJsonValue &operator>>(const QJsonValue &json, CValueObject &valueObject) + { + valueObject.fromJson(json.toObject()); + return json; + } + + /*! + * \brief Non member, non friend operator >> for JSON + * \param json + * \param valueObject + * \return + */ + inline const QJsonValueRef &operator>>(const QJsonValueRef &json, CValueObject &valueObject) + { + valueObject.fromJson(json.toObject()); + return json; + } + + /*! + * \brief Non member, non friend operator >> for JSON + * \param json + * \param value + * \return + */ + inline QJsonArray &operator<<(QJsonArray &json, const CValueObject &value) + { + json.append(value.toJson()); + return json; + } + + /*! + * \brief Non member, non friend operator >> for JSON + * \param json + * \param value + * \return + */ + template typename std::enable_if::value, QJsonObject>::type & + operator<<(QJsonObject &json, const std::pair &value) + { + json.insert(value.first, QJsonValue(value.second.toJson())); + return json; + } + /*! * Allow comparison with QVariant, e.g. QVariant == CFrequency ? * \param variant