diff --git a/src/blackmisc/json.cpp b/src/blackmisc/json.cpp index 7444c34ee..428bdccba 100644 --- a/src/blackmisc/json.cpp +++ b/src/blackmisc/json.cpp @@ -5,224 +5,218 @@ #include "json.h" -namespace BlackMisc +const QJsonValue &operator >>(const QJsonValue &json, int &value) { + value = json.toInt(); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, int &value) - { - value = json.toInt(); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, qlonglong &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, qlonglong &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, qulonglong &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, qulonglong &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, uint &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, uint &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, qint16 &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, qint16 &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, QString &value) +{ + value = json.toString(); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, QString &value) - { - value = json.toString(); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, double &value) +{ + value = json.toDouble(); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, double &value) - { - value = json.toDouble(); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, bool &value) +{ + value = json.toBool(); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, bool &value) - { - value = json.toBool(); - return json; - } +const QJsonValue &operator >>(const QJsonValue &json, QDateTime &value) +{ + value = QDateTime::fromString(json.toString()); + return json; +} - const QJsonValue &operator >>(const QJsonValue &json, QDateTime &value) - { - value = QDateTime::fromString(json.toString()); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, int &value) +{ + value = json.toInt(); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, int &value) - { - value = json.toInt(); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, qlonglong &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, qlonglong &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, qulonglong &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, qulonglong &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, uint &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, uint &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, qint16 &value) +{ + value = static_cast(json.toInt()); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, qint16 &value) - { - value = static_cast(json.toInt()); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, QString &value) +{ + value = json.toString(); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, QString &value) - { - value = json.toString(); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, double &value) +{ + value = json.toDouble(); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, double &value) - { - value = json.toDouble(); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, bool &value) +{ + value = json.toBool(); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, bool &value) - { - value = json.toBool(); - return json; - } +const QJsonValueRef &operator >>(const QJsonValueRef &json, QDateTime &value) +{ + value = QDateTime::fromString(json.toString()); + return json; +} - const QJsonValueRef &operator >>(const QJsonValueRef &json, QDateTime &value) - { - value = QDateTime::fromString(json.toString()); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const int value) +{ + json.append(QJsonValue(value)); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const int value) - { - json.append(QJsonValue(value)); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const qint16 value) +{ + json.append(QJsonValue(value)); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const qint16 value) - { - json.append(QJsonValue(value)); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const qlonglong value) +{ + json.append(QJsonValue(value)); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const qlonglong value) - { - json.append(QJsonValue(value)); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const uint value) +{ + json.append(QJsonValue(static_cast(value))); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const uint value) - { - json.append(QJsonValue(static_cast(value))); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const qulonglong value) +{ + json.append(QJsonValue(static_cast(value))); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const qulonglong value) - { - json.append(QJsonValue(static_cast(value))); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const QString &value) +{ + json.append(QJsonValue(value)); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const QString &value) - { - json.append(QJsonValue(value)); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const double value) +{ + json.append(QJsonValue(value)); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const double value) - { - json.append(QJsonValue(value)); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const bool value) +{ + json.append(QJsonValue(value)); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const bool value) - { - json.append(QJsonValue(value)); - return json; - } +QJsonArray &operator<<(QJsonArray &json, const QDateTime &value) +{ + json.append(QJsonValue(value.toString())); + return json; +} - QJsonArray &operator<<(QJsonArray &json, const QDateTime &value) - { - json.append(QJsonValue(value.toString())); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second)); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second)); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second)); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second)); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(static_cast(value.second))); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(static_cast(value.second))); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second)); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second)); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(static_cast(value.second))); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(static_cast(value.second))); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second)); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second)); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second)); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second)); - return json; - } +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second)); + return json; +} - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second)); - return json; - } - - QJsonObject &operator<<(QJsonObject &json, const std::pair &value) - { - json.insert(value.first, QJsonValue(value.second.toString())); - return json; - } - - -} // BlackMisc +QJsonObject &operator<<(QJsonObject &json, const std::pair &value) +{ + json.insert(value.first, QJsonValue(value.second.toString())); + return json; +} diff --git a/src/blackmisc/json.h b/src/blackmisc/json.h index 49eb076d5..1562342ec 100644 --- a/src/blackmisc/json.h +++ b/src/blackmisc/json.h @@ -22,90 +22,90 @@ * \defgroup JSON Streaming operators for JSON */ +//! \name Streaming operators for QJsonValue (to value) +//! \ingroup JSON +//! @{ +const QJsonValue &operator >>(const QJsonValue &json, int &value); +const QJsonValue &operator >>(const QJsonValue &json, qlonglong &value); +const QJsonValue &operator >>(const QJsonValue &json, qulonglong &value); +const QJsonValue &operator >>(const QJsonValue &json, uint &value); +const QJsonValue &operator >>(const QJsonValue &json, qint16 &value); +const QJsonValue &operator >>(const QJsonValue &json, QString &value); +const QJsonValue &operator >>(const QJsonValue &json, double &value); +const QJsonValue &operator >>(const QJsonValue &json, bool &value); +const QJsonValue &operator >>(const QJsonValue &json, QDateTime &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, int &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, qlonglong &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, qulonglong &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, uint &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, qint16 &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, QString &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, double &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, bool &value); +const QJsonValueRef &operator >>(const QJsonValueRef &json, QDateTime &value); +//! @} + +//! \brief Specialized JSON serialization for enum +//! \remarks needs to be in global namespace +//! \ingroup JSON +template typename +std::enable_if::value, QJsonObject>::type +&operator<<(QJsonObject &json, std::pair value) +{ + json.insert(value.first, QJsonValue(static_cast(value.second))); + return json; +} + +//! \brief Specialized JSON deserialization for enum +//! \ingroup JSON +template typename +std::enable_if::value, QJsonValue>::type +const &operator>>(const QJsonValue &json, ENUM &value) +{ + value = static_cast(json.toInt()); + return json; +} + +//! \brief Specialized JSON deserialization for enum +//! \ingroup JSON +template typename +std::enable_if::value, QJsonValueRef>::type +const &operator>>(const QJsonValueRef &json, ENUM &value) +{ + value = static_cast(json.toInt()); + return json; +} + +//! \name Streaming operators for QJsonArray (from value) +//! \ingroup JSON +//! @{ +QJsonArray &operator<<(QJsonArray &json, const int value); +QJsonArray &operator<<(QJsonArray &json, const std::pair &value); +QJsonArray &operator<<(QJsonArray &json, const qlonglong value); +QJsonArray &operator<<(QJsonArray &json, const uint value); +QJsonArray &operator<<(QJsonArray &json, const qulonglong value); +QJsonArray &operator<<(QJsonArray &json, const QString &value); +QJsonArray &operator<<(QJsonArray &json, const double value); +QJsonArray &operator<<(QJsonArray &json, const bool value); +QJsonArray &operator<<(QJsonArray &json, const QDateTime &value); +//! @} + +//! \name Streaming operators for QJsonObject (from value) +//! \ingroup JSON +//! @{ +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +QJsonObject &operator<<(QJsonObject &json, const std::pair &value); +//! @} + namespace BlackMisc { - //! \name Streaming operators for QJsonValue (to value) - //! \ingroup JSON - //! @{ - const QJsonValue &operator >>(const QJsonValue &json, int &value); - const QJsonValue &operator >>(const QJsonValue &json, qlonglong &value); - const QJsonValue &operator >>(const QJsonValue &json, qulonglong &value); - const QJsonValue &operator >>(const QJsonValue &json, uint &value); - const QJsonValue &operator >>(const QJsonValue &json, qint16 &value); - const QJsonValue &operator >>(const QJsonValue &json, QString &value); - const QJsonValue &operator >>(const QJsonValue &json, double &value); - const QJsonValue &operator >>(const QJsonValue &json, bool &value); - const QJsonValue &operator >>(const QJsonValue &json, QDateTime &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, int &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, qlonglong &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, qulonglong &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, uint &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, qint16 &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, QString &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, double &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, bool &value); - const QJsonValueRef &operator >>(const QJsonValueRef &json, QDateTime &value); - //! @} - - //! \brief Specialized JSON serialization for enum - //! \remarks needs to be in global namespace - //! \ingroup JSON - template typename - std::enable_if::value, QJsonObject>::type - &operator<<(QJsonObject &json, std::pair value) - { - json.insert(value.first, QJsonValue(static_cast(value.second))); - return json; - } - - //! \brief Specialized JSON deserialization for enum - //! \ingroup JSON - template typename - std::enable_if::value, QJsonValue>::type - const &operator>>(const QJsonValue &json, ENUM &value) - { - value = static_cast(json.toInt()); - return json; - } - - //! \brief Specialized JSON deserialization for enum - //! \ingroup JSON - template typename - std::enable_if::value, QJsonValueRef>::type - const &operator>>(const QJsonValueRef &json, ENUM &value) - { - value = static_cast(json.toInt()); - return json; - } - - //! \name Streaming operators for QJsonArray (from value) - //! \ingroup JSON - //! @{ - QJsonArray &operator<<(QJsonArray &json, const int value); - QJsonArray &operator<<(QJsonArray &json, const std::pair &value); - QJsonArray &operator<<(QJsonArray &json, const qlonglong value); - QJsonArray &operator<<(QJsonArray &json, const uint value); - QJsonArray &operator<<(QJsonArray &json, const qulonglong value); - QJsonArray &operator<<(QJsonArray &json, const QString &value); - QJsonArray &operator<<(QJsonArray &json, const double value); - QJsonArray &operator<<(QJsonArray &json, const bool value); - QJsonArray &operator<<(QJsonArray &json, const QDateTime &value); - //! @} - - //! \name Streaming operators for QJsonObject (from value) - //! \ingroup JSON - //! @{ - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - QJsonObject &operator<<(QJsonObject &json, const std::pair &value); - //! @} - namespace Json { //! \brief Append to first JSON object (concatenate) diff --git a/src/blackmisc/tuple.h b/src/blackmisc/tuple.h index 0e07cf741..c52ac5d75 100644 --- a/src/blackmisc/tuple.h +++ b/src/blackmisc/tuple.h @@ -11,7 +11,6 @@ #define BLACKMISC_TUPLE_H #include "tuple_private.h" -#include "json.h" /*! * \defgroup Tuples Tuples Simplified handling of class members (CValueObject) by std::tuple diff --git a/src/blackmisc/tuple_private.h b/src/blackmisc/tuple_private.h index c60086353..ef8584f01 100644 --- a/src/blackmisc/tuple_private.h +++ b/src/blackmisc/tuple_private.h @@ -11,13 +11,13 @@ #ifndef BLACKMISC_TUPLE_PRIVATE_H #define BLACKMISC_TUPLE_PRIVATE_H -#include "json.h" #include #include #include #include #include #include +#include #include #include #include diff --git a/src/blackmisc/valueobject.h b/src/blackmisc/valueobject.h index 9be6bc705..7b312d6bb 100644 --- a/src/blackmisc/valueobject.h +++ b/src/blackmisc/valueobject.h @@ -2,6 +2,7 @@ #define BLACKMISC_VALUEOBJECT_H #include "tuple.h" +#include "json.h" #include #include #include