aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/value-to-json.cc
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2014-11-30 13:16:19 -0500
committerShea Levy <shea@shealevy.com>2014-12-02 10:27:04 -0500
commit320659b0cd161249c95e736c3fb309b1a73ea728 (patch)
treef58c49ae4828572d4642a4d02360f8a415a9f0f9 /src/libexpr/value-to-json.cc
parent5f04da905fcd01ea2d68cdbf7af41c836df5bb4e (diff)
Allow external code using libnixexpr to add types
Code that links to libnixexpr (e.g. plugins loaded with importNative, or nix-exec) may want to provide custom value types and operations on values of those types. For example, nix-exec is currently using sets where a custom IO value type would be more appropriate. This commit provides a generic hook for such types in the form of tExternal and the ExternalBase virtual class, which contains all functions necessary for libnixexpr's type-polymorphic functions (e.g. `showType`) to be implemented.
Diffstat (limited to 'src/libexpr/value-to-json.cc')
-rw-r--r--src/libexpr/value-to-json.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libexpr/value-to-json.cc b/src/libexpr/value-to-json.cc
index d1ec9b566..b9f3e6551 100644
--- a/src/libexpr/value-to-json.cc
+++ b/src/libexpr/value-to-json.cc
@@ -80,10 +80,21 @@ void printValueAsJSON(EvalState & state, bool strict,
break;
}
+ case tExternal:
+ v.external->printValueAsJSON(state, strict, str, context);
+ break;
+
default:
throw TypeError(format("cannot convert %1% to JSON") % showType(v));
}
}
+void ExternalValueBase::printValueAsJSON(EvalState & state, bool strict,
+ std::ostream & str, PathSet & context)
+{
+ throw TypeError(format("cannot convert %1% to JSON") % showType());
+}
+
+
}