aboutsummaryrefslogtreecommitdiff
path: root/lib/secrets.nom
diff options
context:
space:
mode:
Diffstat (limited to 'lib/secrets.nom')
-rw-r--r--lib/secrets.nom39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/secrets.nom b/lib/secrets.nom
new file mode 100644
index 0000000..da6942e
--- /dev/null
+++ b/lib/secrets.nom
@@ -0,0 +1,39 @@
+macro block: with secrets %block
+..=: ".."
+ |local secrets = {}
+ |\((%block's "value")'s "value") as lua block\
+
+macro block: with secrets as %secret_name %block
+..=: ".."
+ |local \%secret_name as value\ = {}
+ |\((%block's "value")'s "value") as lua block\
+
+macro: secrets
+..=: "secrets"
+
+macro:
+ secret %key
+ secret value of %key
+ secret value for %key
+..=:
+ if (((%key ->"value")->"type") != "Var"):
+ error ".."
+ |Wrong type, expected Var, but got: \(%key ->"value")->"type"\
+ ".."|secrets[\repr ((%key -> "value")->"value")\]
+
+macro block: secret %key = %value
+..=:
+ lua block ".."
+ |if vars.key.value.type ~= "Var" then
+ | compiler:error("Assignment operation has the wrong type for the left hand side. "
+ | .."Expected Var, but got: "..vars.key.value.type)
+ |end
+ |if vars.value.value.type ~= "Thunk" then
+ | compiler:error("Assignment operation has the wrong type for the right hand side. "
+ | .."Expected Thunk, but got: "..vars.value.value.type.."\\nMaybe you used '=' instead of '=:'?")
+ |end
+ ".."|do
+ | local ret
+ | \lua expr "compiler:tree_to_lua(vars.value.value.value, 'Statement')"\
+ | secrets[\repr ((%key -> "value")->"value")\] = ret
+ |end