summaryrefslogtreecommitdiff
path: root/src/libs/languageserverprotocol/jsonobject.h
diff options
context:
space:
mode:
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
{