feat(Profpatsch): dump netencode spec & parser
The netencode standard, a no-nonsense extension of netstrings for
structured data.
Includes a nix generator module and a rust parsing library.
Imported from
e409df3861/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>
This commit is contained in:
parent
1261616bff
commit
f1c38e2560
4 changed files with 761 additions and 0 deletions
49
users/Profpatsch/netencode/netencode.nix
Normal file
49
users/Profpatsch/netencode/netencode.nix
Normal file
|
|
@ -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
|
||||
;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue