aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/config.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-04-20 17:34:47 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-04-20 17:34:47 +0200
commitefa4bdbfcd1489527bcf6f20a49c9a3bca8bbf6b (patch)
tree0e965a2b8feb129623c221564e7ca208ce16fe2a /src/libutil/config.cc
parent4410e9d995bcd53a7a4cff0bbee3917375adcba3 (diff)
Improve nix show-config --json
In particular, show descriptions. This could be used for manpage generation etc.
Diffstat (limited to 'src/libutil/config.cc')
-rw-r--r--src/libutil/config.cc38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/libutil/config.cc b/src/libutil/config.cc
index 72b6cf806..62c6433c7 100644
--- a/src/libutil/config.cc
+++ b/src/libutil/config.cc
@@ -1,5 +1,6 @@
#include "config.hh"
#include "args.hh"
+#include "json.hh"
namespace nix {
@@ -103,6 +104,17 @@ void Config::resetOverriden()
s.second.setting->overriden = false;
}
+void Config::toJSON(JSONObject & out)
+{
+ for (auto & s : _settings)
+ if (!s.second.isAlias) {
+ JSONObject out2(out.object(s.first));
+ out2.attr("description", s.second.setting->description);
+ JSONPlaceholder out3(out2.placeholder("value"));
+ s.second.setting->toJSON(out3);
+ }
+}
+
AbstractSetting::AbstractSetting(
const std::string & name,
const std::string & description,
@@ -111,6 +123,17 @@ AbstractSetting::AbstractSetting(
{
}
+void AbstractSetting::toJSON(JSONPlaceholder & out)
+{
+ out.write(to_string());
+}
+
+template<typename T>
+void BaseSetting<T>::toJSON(JSONPlaceholder & out)
+{
+ out.write(value);
+}
+
template<> void BaseSetting<std::string>::set(const std::string & str)
{
value = str;
@@ -161,6 +184,13 @@ template<> std::string BaseSetting<Strings>::to_string()
return concatStringsSep(" ", value);
}
+template<> void BaseSetting<Strings>::toJSON(JSONPlaceholder & out)
+{
+ JSONList list(out.list());
+ for (auto & s : value)
+ list.elem(s);
+}
+
template<> void BaseSetting<StringSet>::set(const std::string & str)
{
value = tokenizeString<StringSet>(str);
@@ -171,12 +201,20 @@ template<> std::string BaseSetting<StringSet>::to_string()
return concatStringsSep(" ", value);
}
+template<> void BaseSetting<StringSet>::toJSON(JSONPlaceholder & out)
+{
+ JSONList list(out.list());
+ for (auto & s : value)
+ list.elem(s);
+}
+
template class BaseSetting<int>;
template class BaseSetting<unsigned int>;
template class BaseSetting<long>;
template class BaseSetting<unsigned long>;
template class BaseSetting<long long>;
template class BaseSetting<unsigned long long>;
+template class BaseSetting<bool>;
void PathSetting::set(const std::string & str)
{