about summary refs log tree commit diff
path: root/src/libstore/storeexpr.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/storeexpr.hh')
-rw-r--r--src/libstore/storeexpr.hh56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/libstore/storeexpr.hh b/src/libstore/storeexpr.hh
new file mode 100644
index 000000000000..07676c3ccedb
--- /dev/null
+++ b/src/libstore/storeexpr.hh
@@ -0,0 +1,56 @@
+#ifndef __STOREEXPR_H
+#define __STOREEXPR_H
+
+#include "aterm.hh"
+#include "store.hh"
+
+
+/* Abstract syntax of store expressions. */
+
+struct ClosureElem
+{
+    PathSet refs;
+};
+
+typedef map<Path, ClosureElem> ClosureElems;
+
+struct Closure
+{
+    PathSet roots;
+    ClosureElems elems;
+};
+
+typedef map<string, string> StringPairs;
+
+struct Derivation
+{
+    PathSet outputs;
+    PathSet inputs; /* Store expressions, not actual inputs */
+    string platform;
+    Path builder;
+    Strings args;
+    StringPairs env;
+};
+
+struct StoreExpr
+{
+    enum { neClosure, neDerivation } type;
+    Closure closure;
+    Derivation derivation;
+};
+
+
+/* Hash an aterm. */
+Hash hashTerm(ATerm t);
+
+/* Write an aterm to the Nix store directory, and return its path. */
+Path writeTerm(ATerm t, const string & suffix);
+
+/* Parse a store expression. */
+StoreExpr parseStoreExpr(ATerm t);
+
+/* Parse a store expression. */
+ATerm unparseStoreExpr(const StoreExpr & ne);
+
+
+#endif /* !__STOREEXPR_H */