about summary refs log tree commit diff
path: root/pkgs/profpatsch/netencode
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2020-06-27 01:56:38 +0200
committerProfpatsch <mail@profpatsch.de>2020-06-27 01:56:38 +0200
commit5543a7fefd0bd28e50d7945587353d77a520c402 (patch)
tree7748186de7955cd2dec2de6b0ca5b241514a7096 /pkgs/profpatsch/netencode
parenta46b64eec2daa068b81b7bcedbcd0df71cdc133e (diff)
pkgs/profpatsch/netencode: add a netencode.nix to generate netencode
We can define a more or less complete generator in less than 50 lines
of nix. Nice.
Diffstat (limited to 'pkgs/profpatsch/netencode')
-rw-r--r--pkgs/profpatsch/netencode/netencode.nix49
1 files changed, 49 insertions, 0 deletions
diff --git a/pkgs/profpatsch/netencode/netencode.nix b/pkgs/profpatsch/netencode/netencode.nix
new file mode 100644
index 00000000..9c50f3d9
--- /dev/null
+++ b/pkgs/profpatsch/netencode/netencode.nix
@@ -0,0 +1,49 @@
+let
+
+  netstring = tag: suffix: s:
+    "${tag}${toString (builtins.stringLength s)}:${s}${suffix}";
+
+  unit = "u,";
+
+  n1 = b: if b then "n1:1," else "n1:0,";
+
+  n = i: n: netstring "n" ",";
+  i = i: n: netstring "i" ",";
+
+  n3 = n 3;
+  n6 = n 6;
+  n7 = n 7;
+
+  i3 = i 3;
+  i6 = i 6;
+  i7 = i 7;
+
+  text = netstring "t" ",";
+  binary = netstring "b" ",";
+
+  tag = key: val: netstring "<" "|" key + val;
+
+  concatStrings = builtins.concatStringsSep "";
+
+  record = lokv: netstring "{" "}"
+    (concatStrings (map (kv: tag kv.key kv.val) lokv));
+
+  list = l: netstring "[" "]" (concatStrings l);
+
+in {
+  inherit
+    unit
+    n1
+    n3
+    n6
+    n7
+    i3
+    i6
+    i7
+    text
+    binary
+    tag
+    record
+    list
+    ;
+}