aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2020-09-09 11:35:33 +0200
committerregnat <rg@regnat.ovh>2020-09-16 13:53:08 +0200
commit3c525d15903ea98e5401ff57061295b8c625cc45 (patch)
tree08b4a56d9b02b1d18b296e1b86a4108130e5d3da /src
parent3b57181f8ed94cfa149ad4319ba96d41c5fbc30e (diff)
Complete the `toJSON` instance for `Setting<T>`
Don't let it just contain the value, but also the other fields of the setting (description, aliases, etc..)
Diffstat (limited to 'src')
-rw-r--r--src/libstore/globals.cc5
-rw-r--r--src/libutil/config.cc28
-rw-r--r--src/libutil/config.hh11
3 files changed, 17 insertions, 27 deletions
diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc
index 4a5971c3f..491c664db 100644
--- a/src/libstore/globals.cc
+++ b/src/libstore/globals.cc
@@ -162,11 +162,6 @@ template<> std::string BaseSetting<SandboxMode>::to_string() const
else abort();
}
-template<> nlohmann::json BaseSetting<SandboxMode>::toJSON()
-{
- return AbstractSetting::toJSON();
-}
-
template<> void BaseSetting<SandboxMode>::convertToArg(Args & args, const std::string & category)
{
args.addFlag({
diff --git a/src/libutil/config.cc b/src/libutil/config.cc
index 3cf720bce..faa5cdbeb 100644
--- a/src/libutil/config.cc
+++ b/src/libutil/config.cc
@@ -137,11 +137,7 @@ nlohmann::json Config::toJSON()
auto res = nlohmann::json::object();
for (auto & s : _settings)
if (!s.second.isAlias) {
- auto obj = nlohmann::json::object();
- obj.emplace("description", s.second.setting->description);
- obj.emplace("aliases", s.second.setting->aliases);
- obj.emplace("value", s.second.setting->toJSON());
- res.emplace(s.first, obj);
+ res.emplace(s.first, s.second.setting->toJSON());
}
return res;
}
@@ -168,17 +164,19 @@ void AbstractSetting::setDefault(const std::string & str)
nlohmann::json AbstractSetting::toJSON()
{
- return to_string();
+ return nlohmann::json(toJSONObject());
}
-void AbstractSetting::convertToArg(Args & args, const std::string & category)
+std::map<std::string, nlohmann::json> AbstractSetting::toJSONObject()
{
+ std::map<std::string, nlohmann::json> obj;
+ obj.emplace("description", description);
+ obj.emplace("aliases", aliases);
+ return obj;
}
-template<typename T>
-nlohmann::json BaseSetting<T>::toJSON()
+void AbstractSetting::convertToArg(Args & args, const std::string & category)
{
- return value;
}
template<typename T>
@@ -259,11 +257,6 @@ template<> std::string BaseSetting<Strings>::to_string() const
return concatStringsSep(" ", value);
}
-template<> nlohmann::json BaseSetting<Strings>::toJSON()
-{
- return value;
-}
-
template<> void BaseSetting<StringSet>::set(const std::string & str)
{
value = tokenizeString<StringSet>(str);
@@ -274,11 +267,6 @@ template<> std::string BaseSetting<StringSet>::to_string() const
return concatStringsSep(" ", value);
}
-template<> nlohmann::json BaseSetting<StringSet>::toJSON()
-{
- return value;
-}
-
template class BaseSetting<int>;
template class BaseSetting<unsigned int>;
template class BaseSetting<long>;
diff --git a/src/libutil/config.hh b/src/libutil/config.hh
index 2b4265806..be23076b0 100644
--- a/src/libutil/config.hh
+++ b/src/libutil/config.hh
@@ -206,7 +206,9 @@ protected:
virtual std::string to_string() const = 0;
- virtual nlohmann::json toJSON();
+ nlohmann::json toJSON();
+
+ virtual std::map<std::string, nlohmann::json> toJSONObject();
virtual void convertToArg(Args & args, const std::string & category);
@@ -251,7 +253,12 @@ public:
void convertToArg(Args & args, const std::string & category) override;
- nlohmann::json toJSON() override;
+ std::map<std::string, nlohmann::json> toJSONObject() override
+ {
+ auto obj = AbstractSetting::toJSONObject();
+ obj.emplace("value", value);
+ return obj;
+ }
};
template<typename T>