diff options
author | Marc Deop <marc@marcdeop.com> | 2019-03-02 12:26:57 +0100 |
---|---|---|
committer | Marc Deop <marc@marcdeop.com> | 2019-03-02 12:26:57 +0100 |
commit | aacc4bcb4a487871daae6717f77605aaba444341 (patch) | |
tree | 4f50b6874821667ccb6b91c017e5d041e3846112 /lib/converters.h | |
parent | c971b924cd62822ed6fb1a0291c483ae73a3ecda (diff) | |
download | libquotient-aacc4bcb4a487871daae6717f77605aaba444341.tar.gz libquotient-aacc4bcb4a487871daae6717f77605aaba444341.zip |
style: apply .clang-format to all .cpp and .h files
Diffstat (limited to 'lib/converters.h')
-rw-r--r-- | lib/converters.h | 239 |
1 files changed, 104 insertions, 135 deletions
diff --git a/lib/converters.h b/lib/converters.h index af2be645..68a841cf 100644 --- a/lib/converters.h +++ b/lib/converters.h @@ -1,31 +1,31 @@ /****************************************************************************** -* Copyright (C) 2017 Kitsune Ral <kitsune-ral@users.sf.net> -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ + * Copyright (C) 2017 Kitsune Ral <kitsune-ral@users.sf.net> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ #pragma once #include "util.h" -#include <QtCore/QJsonObject> +#include <QtCore/QDate> #include <QtCore/QJsonArray> // Includes <QtCore/QJsonValue> #include <QtCore/QJsonDocument> -#include <QtCore/QDate> -#include <QtCore/QUrlQuery> +#include <QtCore/QJsonObject> #include <QtCore/QSet> +#include <QtCore/QUrlQuery> #include <QtCore/QVector> #include <unordered_map> @@ -38,35 +38,29 @@ using optional = std::experimental::optional<T>; #endif // Enable std::unordered_map<QString, T> -namespace std -{ - template <> struct hash<QString> - { +namespace std { + template <> struct hash<QString> { size_t operator()(const QString& s) const Q_DECL_NOEXCEPT { return qHash(s #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - , uint(qGlobalQHashSeed()) + , + uint(qGlobalQHashSeed()) #endif - ); + ); } }; } class QVariant; -namespace QMatrixClient -{ - template <typename T> - struct JsonObjectConverter - { +namespace QMatrixClient { + template <typename T> struct JsonObjectConverter { static void dumpTo(QJsonObject& jo, const T& pod) { jo = pod; } static void fillFrom(const QJsonObject& jo, T& pod) { pod = jo; } }; - template <typename T> - struct JsonConverter - { + template <typename T> struct JsonConverter { static QJsonObject dump(const T& pod) { QJsonObject jo; @@ -83,39 +77,33 @@ namespace QMatrixClient static T load(const QJsonDocument& jd) { return doLoad(jd.object()); } }; - template <typename T> - inline auto toJson(const T& pod) + template <typename T> inline auto toJson(const T& pod) { return JsonConverter<T>::dump(pod); } - template <typename T> - inline auto fillJson(QJsonObject& json, const T& data) + template <typename T> inline auto fillJson(QJsonObject& json, const T& data) { JsonObjectConverter<T>::dumpTo(json, data); } - template <typename T> - inline auto fromJson(const QJsonValue& jv) + template <typename T> inline auto fromJson(const QJsonValue& jv) { return JsonConverter<T>::load(jv); } - template <typename T> - inline T fromJson(const QJsonDocument& jd) + template <typename T> inline T fromJson(const QJsonDocument& jd) { return JsonConverter<T>::load(jd); } - template <typename T> - inline void fromJson(const QJsonValue& jv, T& pod) + template <typename T> inline void fromJson(const QJsonValue& jv, T& pod) { if (!jv.isUndefined()) pod = fromJson<T>(jv); } - template <typename T> - inline void fromJson(const QJsonDocument& jd, T& pod) + template <typename T> inline void fromJson(const QJsonDocument& jd, T& pod) { pod = fromJson<T>(jd); } @@ -130,8 +118,7 @@ namespace QMatrixClient pod = fromJson<T>(jv); } - template <typename T> - inline void fillFromJson(const QJsonValue& jv, T& pod) + template <typename T> inline void fillFromJson(const QJsonValue& jv, T& pod) { if (jv.isObject()) JsonObjectConverter<T>::fillFrom(jv.toObject(), pod); @@ -139,59 +126,49 @@ namespace QMatrixClient // JsonConverter<> specialisations - template <typename T> - struct TrivialJsonDumper - { + template <typename T> struct TrivialJsonDumper { // Works for: QJsonValue (and all things it can consume), // QJsonObject, QJsonArray static auto dump(const T& val) { return val; } }; - template <> struct JsonConverter<bool> : public TrivialJsonDumper<bool> - { + template <> struct JsonConverter<bool> : public TrivialJsonDumper<bool> { static auto load(const QJsonValue& jv) { return jv.toBool(); } }; - template <> struct JsonConverter<int> : public TrivialJsonDumper<int> - { + template <> struct JsonConverter<int> : public TrivialJsonDumper<int> { static auto load(const QJsonValue& jv) { return jv.toInt(); } }; - template <> struct JsonConverter<double> - : public TrivialJsonDumper<double> - { + template <> + struct JsonConverter<double> : public TrivialJsonDumper<double> { static auto load(const QJsonValue& jv) { return jv.toDouble(); } }; - template <> struct JsonConverter<float> : public TrivialJsonDumper<float> - { + template <> struct JsonConverter<float> : public TrivialJsonDumper<float> { static auto load(const QJsonValue& jv) { return float(jv.toDouble()); } }; - template <> struct JsonConverter<qint64> - : public TrivialJsonDumper<qint64> - { + template <> + struct JsonConverter<qint64> : public TrivialJsonDumper<qint64> { static auto load(const QJsonValue& jv) { return qint64(jv.toDouble()); } }; - template <> struct JsonConverter<QString> - : public TrivialJsonDumper<QString> - { + template <> + struct JsonConverter<QString> : public TrivialJsonDumper<QString> { static auto load(const QJsonValue& jv) { return jv.toString(); } }; - template <> struct JsonConverter<QDateTime> - { + template <> struct JsonConverter<QDateTime> { static auto dump(const QDateTime& val) = delete; // not provided yet static auto load(const QJsonValue& jv) { - return QDateTime::fromMSecsSinceEpoch( - fromJson<qint64>(jv), Qt::UTC); + return QDateTime::fromMSecsSinceEpoch(fromJson<qint64>(jv), + Qt::UTC); } }; - template <> struct JsonConverter<QDate> - { + template <> struct JsonConverter<QDate> { static auto dump(const QDate& val) = delete; // not provided yet static auto load(const QJsonValue& jv) { @@ -199,14 +176,12 @@ namespace QMatrixClient } }; - template <> struct JsonConverter<QJsonArray> - : public TrivialJsonDumper<QJsonArray> - { + template <> + struct JsonConverter<QJsonArray> : public TrivialJsonDumper<QJsonArray> { static auto load(const QJsonValue& jv) { return jv.toArray(); } }; - template <> struct JsonConverter<QByteArray> - { + template <> struct JsonConverter<QByteArray> { static QString dump(const QByteArray& ba) { return ba.constData(); } static auto load(const QJsonValue& jv) { @@ -214,19 +189,16 @@ namespace QMatrixClient } }; - template <> struct JsonConverter<QVariant> - { + template <> struct JsonConverter<QVariant> { static QJsonValue dump(const QVariant& v); static QVariant load(const QJsonValue& jv); }; - template <typename VectorT, - typename T = typename VectorT::value_type> - struct JsonArrayConverter - { + template <typename VectorT, typename T = typename VectorT::value_type> + struct JsonArrayConverter { static void dumpTo(QJsonArray& ar, const VectorT& vals) { - for (const auto& v: vals) + for (const auto& v : vals) ar.push_back(toJson(v)); } static auto dump(const VectorT& vals) @@ -237,8 +209,9 @@ namespace QMatrixClient } static auto load(const QJsonArray& ja) { - VectorT vect; vect.reserve(typename VectorT::size_type(ja.size())); - for (const auto& i: ja) + VectorT vect; + vect.reserve(typename VectorT::size_type(ja.size())); + for (const auto& i : ja) vect.push_back(fromJson<T>(i)); return vect; } @@ -246,33 +219,32 @@ namespace QMatrixClient static auto load(const QJsonDocument& jd) { return load(jd.array()); } }; - template <typename T> struct JsonConverter<std::vector<T>> - : public JsonArrayConverter<std::vector<T>> - { }; + template <typename T> + struct JsonConverter<std::vector<T>> + : public JsonArrayConverter<std::vector<T>> { + }; - template <typename T> struct JsonConverter<QVector<T>> - : public JsonArrayConverter<QVector<T>> - { }; + template <typename T> + struct JsonConverter<QVector<T>> : public JsonArrayConverter<QVector<T>> { + }; - template <typename T> struct JsonConverter<QList<T>> - : public JsonArrayConverter<QList<T>> - { }; + template <typename T> + struct JsonConverter<QList<T>> : public JsonArrayConverter<QList<T>> { + }; - template <> struct JsonConverter<QStringList> - : public JsonConverter<QList<QString>> - { + template <> + struct JsonConverter<QStringList> : public JsonConverter<QList<QString>> { static auto dump(const QStringList& sl) { return QJsonArray::fromStringList(sl); } }; - template <> struct JsonObjectConverter<QSet<QString>> - { + template <> struct JsonObjectConverter<QSet<QString>> { static void dumpTo(QJsonObject& json, const QSet<QString>& s) { - for (const auto& e: s) - json.insert(toJson(e), QJsonObject{}); + for (const auto& e : s) + json.insert(toJson(e), QJsonObject {}); } static auto fillFrom(const QJsonObject& json, QSet<QString>& s) { @@ -283,9 +255,7 @@ namespace QMatrixClient } }; - template <typename HashMapT> - struct HashMapFromJson - { + template <typename HashMapT> struct HashMapFromJson { static void dumpTo(QJsonObject& json, const HashMapT& hashMap) { for (auto it = hashMap.begin(); it != hashMap.end(); ++it) @@ -296,19 +266,19 @@ namespace QMatrixClient h.reserve(jo.size()); for (auto it = jo.begin(); it != jo.end(); ++it) h[it.key()] = - fromJson<typename HashMapT::mapped_type>(it.value()); + fromJson<typename HashMapT::mapped_type>(it.value()); } }; template <typename T> struct JsonObjectConverter<std::unordered_map<QString, T>> - : public HashMapFromJson<std::unordered_map<QString, T>> - { }; + : public HashMapFromJson<std::unordered_map<QString, T>> { + }; template <typename T> struct JsonObjectConverter<QHash<QString, T>> - : public HashMapFromJson<QHash<QString, T>> - { }; + : public HashMapFromJson<QHash<QString, T>> { + }; // We could use std::conditional<> below but QT_VERSION* macros in C++ code // cause (kinda valid but useless and noisy) compiler warnings about @@ -319,35 +289,38 @@ namespace QMatrixClient #else QVariantMap; #endif - template <> struct JsonConverter<variant_map_t> - { + template <> struct JsonConverter<variant_map_t> { static QJsonObject dump(const variant_map_t& vh); static QVariantHash load(const QJsonValue& jv); }; // Conditional insertion into a QJsonObject - namespace _impl - { + namespace _impl { template <typename ValT> inline void addTo(QJsonObject& o, const QString& k, ValT&& v) - { o.insert(k, toJson(v)); } + { + o.insert(k, toJson(v)); + } template <typename ValT> inline void addTo(QUrlQuery& q, const QString& k, ValT&& v) - { q.addQueryItem(k, QStringLiteral("%1").arg(v)); } + { + q.addQueryItem(k, QStringLiteral("%1").arg(v)); + } // OpenAPI is entirely JSON-based, which means representing bools as // textual true/false, rather than 1/0. inline void addTo(QUrlQuery& q, const QString& k, bool v) { - q.addQueryItem(k, v ? QStringLiteral("true") - : QStringLiteral("false")); + q.addQueryItem( + k, v ? QStringLiteral("true") : QStringLiteral("false")); } - inline void addTo(QUrlQuery& q, const QString& k, const QStringList& vals) + inline void addTo(QUrlQuery& q, const QString& k, + const QStringList& vals) { - for (const auto& v: vals) + for (const auto& v : vals) q.addQueryItem(k, v); } @@ -359,8 +332,7 @@ namespace QMatrixClient // This one is for types that don't have isEmpty() template <typename ValT, bool Force = true, typename = bool> - struct AddNode - { + struct AddNode { template <typename ContT, typename ForwardedT> static void impl(ContT& container, const QString& key, ForwardedT&& value) @@ -371,31 +343,28 @@ namespace QMatrixClient // This one is for types that have isEmpty() template <typename ValT> - struct AddNode<ValT, false, - decltype(std::declval<ValT>().isEmpty())> - { + struct AddNode<ValT, false, decltype(std::declval<ValT>().isEmpty())> { template <typename ContT, typename ForwardedT> static void impl(ContT& container, const QString& key, ForwardedT&& value) { if (!value.isEmpty()) - AddNode<ValT>::impl(container, - key, std::forward<ForwardedT>(value)); + AddNode<ValT>::impl(container, key, + std::forward<ForwardedT>(value)); } }; // This is a special one that unfolds Omittable<> template <typename ValT, bool Force> - struct AddNode<Omittable<ValT>, Force> - { + struct AddNode<Omittable<ValT>, Force> { template <typename ContT, typename OmittableT> - static void impl(ContT& container, - const QString& key, const OmittableT& value) + static void impl(ContT& container, const QString& key, + const OmittableT& value) { if (!value.omitted()) AddNode<ValT>::impl(container, key, value.value()); else if (Force) // Edge case, no value but must put something - AddNode<ValT>::impl(container, key, QString{}); + AddNode<ValT>::impl(container, key, QString {}); } }; @@ -416,14 +385,14 @@ namespace QMatrixClient }; #endif - } // namespace _impl + } // namespace _impl static constexpr bool IfNotEmpty = false; template <bool Force = true, typename ContT, typename ValT> inline void addParam(ContT& container, const QString& key, ValT&& value) { - _impl::AddNode<std::decay_t<ValT>, Force> - ::impl(container, key, std::forward<ValT>(value)); + _impl::AddNode<std::decay_t<ValT>, Force>::impl( + container, key, std::forward<ValT>(value)); } -} // namespace QMatrixClient +} // namespace QMatrixClient |