8ff77f0b9f
Shouldn’t use the netstring function, since that adds the length of the containing string, which doesn’t make sense for numbers, they just have their one length number and content. Change-Id: I5591f6dd59154c5ef38d6e9b7300d19884a2d57b Reviewed-on: https://cl.tvl.fyi/c/depot/+/2497 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
65 lines
1.1 KiB
Nix
65 lines
1.1 KiB
Nix
{ lib }:
|
|
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: "n${toString i}:${toString n},";
|
|
i = i: n: "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 ({key, val}: tag key val) lokv));
|
|
|
|
list = l: netstring "[" "]" (concatStrings l);
|
|
|
|
dwim = val:
|
|
let match = {
|
|
"bool" = n1;
|
|
"int" = i6;
|
|
"string" = text;
|
|
"set" = attrs: record (lib.mapAttrsToList
|
|
(k: v: {
|
|
key = k;
|
|
val = dwim v;
|
|
}) attrs);
|
|
"list" = l: list (map dwim l);
|
|
};
|
|
in match.${builtins.typeOf val} val;
|
|
|
|
in {
|
|
inherit
|
|
unit
|
|
n1
|
|
n3
|
|
n6
|
|
n7
|
|
i3
|
|
i6
|
|
i7
|
|
text
|
|
binary
|
|
tag
|
|
record
|
|
list
|
|
dwim
|
|
;
|
|
}
|