diff options
author | Profpatsch <mail@profpatsch.de> | 2021-01-02T13·59+0100 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2021-01-03T16·29+0000 |
commit | f1c38e25600d4b61b84a5cdba1c7c9a28cc742a7 (patch) | |
tree | 2412db12959811d8f274154334238217ccb28148 /users/Profpatsch/netencode/netencode.nix | |
parent | 1261616bff04b6a5cb966778da8a336245c08979 (diff) |
feat(Profpatsch): dump netencode spec & parser r/2057
The netencode standard, a no-nonsense extension of netstrings for structured data. Includes a nix generator module and a rust parsing library. Imported from https://github.com/openlab-aux/vuizvui/tree/e409df3861f48de44d0e37277ce007e348a7a0dc/pkgs/profpatsch/netencode Original license GPLv3, but I’m the sole author, so I transfer it to whatever license depot uses. Change-Id: I4f6fa97120a0fd861eeef35085a3dd642ab7c407 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2319 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
Diffstat (limited to 'users/Profpatsch/netencode/netencode.nix')
-rw-r--r-- | users/Profpatsch/netencode/netencode.nix | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/users/Profpatsch/netencode/netencode.nix b/users/Profpatsch/netencode/netencode.nix new file mode 100644 index 000000000000..6bb2fa002796 --- /dev/null +++ b/users/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${toString i}" "," (toString n); + i = i: n: netstring "i${toString i}" "," (toString n); + + 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 + ; +} |