061a91ff8f
Apparently I had forgotten that these already exist on the toplevel. At one point I should unify the two namespaces, but for now at least acknowledge that they are the same functions. Change-Id: Ie7d14de0b65f6c750d97630798c65f777b3eda8c Reviewed-on: https://cl.tvl.fyi/c/depot/+/7673 Reviewed-by: Profpatsch <mail@profpatsch.de> Autosubmit: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
64 lines
1.7 KiB
Nix
64 lines
1.7 KiB
Nix
{ lib, pkgs, depot, ... }:
|
|
let
|
|
toNetstring = depot.nix.netstring.fromString;
|
|
|
|
toNetstringList = xs:
|
|
lib.concatStrings (map toNetstring xs);
|
|
|
|
toNetstringKeyVal = depot.nix.netstring.attrsToKeyValList;
|
|
|
|
python-netstring = depot.users.Profpatsch.writers.python3Lib
|
|
{
|
|
name = "netstring";
|
|
} ''
|
|
def read_netstring(bytes):
|
|
(int_length, rest) = bytes.split(sep=b':', maxsplit=1)
|
|
val = rest[:int(int_length)]
|
|
# has to end on a ,
|
|
assert(rest[len(val)] == ord(','))
|
|
return (val, rest[len(val) + 1:])
|
|
|
|
def read_netstring_key_val(bytes):
|
|
(keyvalnet, rest) = read_netstring(bytes)
|
|
(key, valnet) = read_netstring(keyvalnet)
|
|
(val, nothing) = read_netstring(valnet)
|
|
assert(nothing == b"")
|
|
return (key, val, rest)
|
|
|
|
def read_netstring_key_val_list(bytes):
|
|
rest = bytes
|
|
res = {}
|
|
while rest != b"":
|
|
(key, val, r) = read_netstring_key_val(rest)
|
|
rest = r
|
|
res[key] = val
|
|
return res
|
|
'';
|
|
|
|
rust-netstring = depot.nix.writers.rustSimpleLib
|
|
{
|
|
name = "netstring";
|
|
} ''
|
|
pub fn to_netstring(s: &[u8]) -> Vec<u8> {
|
|
let len = s.len();
|
|
// length of the integer as ascii
|
|
let i_len = ((len as f64).log10() as usize) + 1;
|
|
let ns_len = i_len + 1 + len + 1;
|
|
let mut res = Vec::with_capacity(ns_len);
|
|
res.extend_from_slice(format!("{}:", len).as_bytes());
|
|
res.extend_from_slice(s);
|
|
res.push(b',');
|
|
res
|
|
}
|
|
'';
|
|
|
|
in
|
|
depot.nix.readTree.drvTargets {
|
|
inherit
|
|
toNetstring
|
|
toNetstringList
|
|
toNetstringKeyVal
|
|
python-netstring
|
|
rust-netstring
|
|
;
|
|
}
|