From 5543a7fefd0bd28e50d7945587353d77a520c402 Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Sat, 27 Jun 2020 01:56:38 +0200 Subject: 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. --- pkgs/profpatsch/netencode/netencode.nix | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pkgs/profpatsch/netencode/netencode.nix (limited to 'pkgs/profpatsch/netencode') 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 + ; +} -- cgit 1.4.1