From bc08637eaaf25fb83b685e48e86553d3edacc09a Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 4 Mar 2018 18:00:05 +0900 Subject: converters.h: pass QJsonValue by reference; add support of QHash --- converters.h | 56 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/converters.h b/converters.h index 00d1d339..96efe5f8 100644 --- a/converters.h +++ b/converters.h @@ -46,17 +46,22 @@ namespace QMatrixClient inline QJsonValue toJson(const QByteArray& bytes) { -#if QT_VERSION < QT_VERSION_CHECK(5, 3, 0) - return QJsonValue(QLatin1String(bytes.constData())); -#else return QJsonValue(bytes.constData()); -#endif + } + + template + inline QJsonValue toJson(const QHash& hashMap) + { + QJsonObject json; + for (auto it = hashMap.begin(); it != hashMap.end(); ++it) + json.insert(it.key(), toJson(it.value())); + return json; } template struct FromJson { - T operator()(QJsonValue jv) const { return static_cast(jv); } + T operator()(const QJsonValue& jv) const { return static_cast(jv); } }; template @@ -67,32 +72,32 @@ namespace QMatrixClient template <> struct FromJson { - bool operator()(QJsonValue jv) const { return jv.toBool(); } + bool operator()(const QJsonValue& jv) const { return jv.toBool(); } }; template <> struct FromJson { - int operator()(QJsonValue jv) const { return jv.toInt(); } + int operator()(const QJsonValue& jv) const { return jv.toInt(); } }; template <> struct FromJson { - double operator()(QJsonValue jv) const { return jv.toDouble(); } + double operator()(const QJsonValue& jv) const { return jv.toDouble(); } }; template <> struct FromJson { - qint64 operator()(QJsonValue jv) const { return qint64(jv.toDouble()); } + qint64 operator()(const QJsonValue& jv) const { return qint64(jv.toDouble()); } }; template <> struct FromJson { - QString operator()(QJsonValue jv) const { return jv.toString(); } + QString operator()(const QJsonValue& jv) const { return jv.toString(); } }; template <> struct FromJson { - QDateTime operator()(QJsonValue jv) const + QDateTime operator()(const QJsonValue& jv) const { return QDateTime::fromMSecsSinceEpoch(fromJson(jv), Qt::UTC); } @@ -100,7 +105,7 @@ namespace QMatrixClient template <> struct FromJson { - QDate operator()(QJsonValue jv) const + QDate operator()(const QJsonValue& jv) const { return fromJson(jv).date(); } @@ -108,17 +113,23 @@ namespace QMatrixClient template <> struct FromJson { - QJsonObject operator()(QJsonValue jv) const { return jv.toObject(); } + QJsonObject operator()(const QJsonValue& jv) const + { + return jv.toObject(); + } }; template <> struct FromJson { - QJsonArray operator()(QJsonValue jv) const { return jv.toArray(); } + QJsonArray operator()(const QJsonValue& jv) const + { + return jv.toArray(); + } }; template struct FromJson> { - QVector operator()(QJsonValue jv) const + QVector operator()(const QJsonValue& jv) const { const auto jsonArray = jv.toArray(); QVector vect; vect.resize(jsonArray.size()); @@ -130,7 +141,7 @@ namespace QMatrixClient template struct FromJson> { - QList operator()(QJsonValue jv) const + QList operator()(const QJsonValue& jv) const { const auto jsonArray = jv.toArray(); QList sl; sl.reserve(jsonArray.size()); @@ -144,10 +155,21 @@ namespace QMatrixClient template <> struct FromJson { - QByteArray operator()(QJsonValue jv) const + inline QByteArray operator()(const QJsonValue& jv) const { return fromJson(jv).toLatin1(); } }; + template struct FromJson> + { + QHash operator()(const QJsonValue& jv) const + { + const auto json = jv.toObject(); + QHash h; h.reserve(json.size()); + for (auto it = json.begin(); it != json.end(); ++it) + h.insert(it.key(), fromJson(it.value())); + return h; + } + }; } // namespace QMatrixClient -- cgit v1.2.3