aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/value-to-json.hh
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-08-26 18:55:55 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-08-29 17:29:24 +0200
commitc0a7b84748d5e27e6804117b8a57ce71269c3c66 (patch)
tree40f22e1dd5636673f764bc1f289ab254971ca95d /src/libexpr/value-to-json.hh
parent9fa21765e7f267efcc65e1aa6ab21402ea6125ad (diff)
nix path-info: Add --json flag
Also, factor out JSON generation from value-to-json.{cc,hh}, and support producing indented JSON.
Diffstat (limited to 'src/libexpr/value-to-json.hh')
-rw-r--r--src/libexpr/value-to-json.hh71
1 files changed, 5 insertions, 66 deletions
diff --git a/src/libexpr/value-to-json.hh b/src/libexpr/value-to-json.hh
index c59caf564..67fed6487 100644
--- a/src/libexpr/value-to-json.hh
+++ b/src/libexpr/value-to-json.hh
@@ -8,73 +8,12 @@
namespace nix {
-void printValueAsJSON(EvalState & state, bool strict,
- Value & v, std::ostream & out, PathSet & context);
-
-void escapeJSON(std::ostream & str, const string & s);
+class JSONPlaceholder;
-struct JSONObject
-{
- std::ostream & str;
- bool first;
- JSONObject(std::ostream & str) : str(str), first(true)
- {
- str << "{";
- }
- ~JSONObject()
- {
- str << "}";
- }
- void attr(const string & s)
- {
- if (!first) str << ","; else first = false;
- escapeJSON(str, s);
- str << ":";
- }
- void attr(const string & s, const string & t)
- {
- attr(s);
- escapeJSON(str, t);
- }
- void attr(const string & s, const char * t)
- {
- attr(s);
- escapeJSON(str, t);
- }
- void attr(const string & s, bool b)
- {
- attr(s);
- str << (b ? "true" : "false");
- }
- template<typename T>
- void attr(const string & s, const T & n)
- {
- attr(s);
- str << n;
- }
-};
+void printValueAsJSON(EvalState & state, bool strict,
+ Value & v, JSONPlaceholder & out, PathSet & context);
-struct JSONList
-{
- std::ostream & str;
- bool first;
- JSONList(std::ostream & str) : str(str), first(true)
- {
- str << "[";
- }
- ~JSONList()
- {
- str << "]";
- }
- void elem()
- {
- if (!first) str << ","; else first = false;
- }
- void elem(const string & s)
- {
- elem();
- escapeJSON(str, s);
- }
-};
+void printValueAsJSON(EvalState & state, bool strict,
+ Value & v, std::ostream & str, PathSet & context);
}