summaryrefslogtreecommitdiff
path: root/src/libs/languageserverprotocol/jsonobject.h
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2021-02-03 12:17:20 +0100
committerDavid Schulz <david.schulz@qt.io>2021-02-15 07:13:16 +0000
commit9dad47387f3bc290b1ae4fb11dc1431fec635229 (patch)
tree30b0630e2deacad2271ec24850db430ec3115fb9 /src/libs/languageserverprotocol/jsonobject.h
parent26e540e73d09ef01eb180106f5586118de6ab631 (diff)
downloadqt-creator-9dad47387f3bc290b1ae4fb11dc1431fec635229.tar.gz
LanguageServerProtocol: add inserter for variants
Change-Id: I78ff4f34dfd19dceb1f2e0912ab1a0ea036e24a4 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/libs/languageserverprotocol/jsonobject.h')
-rw-r--r--src/libs/languageserverprotocol/jsonobject.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libs/languageserverprotocol/jsonobject.h b/src/libs/languageserverprotocol/jsonobject.h
index ec0bf94dd7..ff2f420c87 100644
--- a/src/libs/languageserverprotocol/jsonobject.h
+++ b/src/libs/languageserverprotocol/jsonobject.h
@@ -70,6 +70,11 @@ protected:
iterator insert(const QString &key, const JsonObject &value);
iterator insert(const QString &key, const QJsonValue &value);
+ template <typename T, typename V>
+ iterator insertVariant(const QString &key, const V &variant);
+ template <typename T1, typename T2, typename... Args, typename V>
+ iterator insertVariant(const QString &key, const V &variant);
+
// QJSonObject redirections
QJsonValue value(const QString &key) const { return m_jsonObject.value(key); }
bool contains(const QString &key) const { return m_jsonObject.contains(key); }
@@ -129,6 +134,19 @@ private:
QJsonObject m_jsonObject;
};
+template<typename T, typename V>
+JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant)
+{
+ return Utils::holds_alternative<T>(variant) ? insert(key, Utils::get<T>(variant)) : end();
+}
+
+template<typename T1, typename T2, typename... Args, typename V>
+JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant)
+{
+ auto result = insertVariant<T1>(key, variant);
+ return result != end() ? result : insertVariant<T2, Args...>(key, variant);
+}
+
template<typename T>
T JsonObject::typedValue(const QString &key) const
{