From cc3f54a0eedb579c2ffd76f0505af0ccf940f9ff Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Sat, 23 Jan 2021 16:17:01 +0100 Subject: feat(users/Profpatsch/netstring): add rust to_netstring Change-Id: I539472fc9ebc3ebe6c34e01fde9c08d3e2e3558c Reviewed-on: https://cl.tvl.fyi/c/depot/+/2431 Reviewed-by: Profpatsch Tested-by: BuildkiteCI --- users/Profpatsch/netstring/default.nix | 18 ++++++++++++++++++ users/Profpatsch/netstring/tests.nix | 33 ++++++++++++++++++++++++--------- users/Profpatsch/tree-sitter.nix | 20 ++++++-------------- 3 files changed, 48 insertions(+), 23 deletions(-) (limited to 'users') diff --git a/users/Profpatsch/netstring/default.nix b/users/Profpatsch/netstring/default.nix index 35345978a3..3cf882d5a2 100644 --- a/users/Profpatsch/netstring/default.nix +++ b/users/Profpatsch/netstring/default.nix @@ -36,12 +36,29 @@ let return res ''; + rust-netstring = depot.users.Profpatsch.writers.rustSimpleLib { + name = "netstring"; + } '' + pub fn to_netstring(s: &[u8]) -> Vec { + 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 + } + ''; + tests = import ./tests.nix { inherit depot pkgs lib python-netstring + rust-netstring toNetstring toNetstringKeyVal ; @@ -52,6 +69,7 @@ in { toNetstring toNetstringKeyVal python-netstring + rust-netstring tests ; diff --git a/users/Profpatsch/netstring/tests.nix b/users/Profpatsch/netstring/tests.nix index 0d4cee5276..23141472d6 100644 --- a/users/Profpatsch/netstring/tests.nix +++ b/users/Profpatsch/netstring/tests.nix @@ -1,14 +1,9 @@ -{ depot, lib, pkgs, python-netstring, toNetstring, toNetstringKeyVal }: +{ depot, lib, pkgs, python-netstring, rust-netstring, toNetstring, toNetstringKeyVal }: let - imports = { - inherit (depot.users.Profpatsch) - writers - ; - }; - - python-netstring-test = imports.writers.python3 { - name = "python-netstring"; + + python-netstring-test = depot.users.Profpatsch.writers.python3 { + name = "python-netstring-test"; libraries = p: [ python-netstring ]; @@ -36,11 +31,31 @@ let ), { b'foo': b'42', b'bar': b'hi' } ) + ''; + rust-netstring-test = depot.users.Profpatsch.writers.rustSimple { + name = "rust-netstring-test"; + dependencies = [ + rust-netstring + ]; + } '' + extern crate netstring; + + fn main() { + assert_eq!( + std::str::from_utf8(&netstring::to_netstring(b"hello")).unwrap(), + r##"${toNetstring "hello"}"## + ); + assert_eq!( + std::str::from_utf8(&netstring::to_netstring("こんにちは".as_bytes())).unwrap(), + r##"${toNetstring "こんにちは"}"## + ); + } ''; in { inherit python-netstring-test + rust-netstring-test ; } diff --git a/users/Profpatsch/tree-sitter.nix b/users/Profpatsch/tree-sitter.nix index 4a05c825ba..099fa2d5b7 100644 --- a/users/Profpatsch/tree-sitter.nix +++ b/users/Profpatsch/tree-sitter.nix @@ -60,9 +60,13 @@ let watch-file-modified = depot.users.Profpatsch.writers.rustSimple { name = "watch-file-modified"; - dependencies = [ depot.users.Profpatsch.rust-crates.inotify ]; + dependencies = [ + depot.users.Profpatsch.rust-crates.inotify + depot.users.Profpatsch.netstring.rust-netstring + ]; } '' extern crate inotify; + extern crate netstring; use inotify::{EventMask, WatchMask, Inotify}; use std::io::Write; @@ -79,18 +83,6 @@ let ) .expect("Failed to add inotify watch"); - fn to_netstring(s: &[u8]) -> Vec { - 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 - } - let mut buffer = [0u8; 4096]; loop { let events = inotify @@ -99,7 +91,7 @@ let for event in events { if event.wd == file_watch { - std::io::stdout().write(&to_netstring(file.as_bytes())); + std::io::stdout().write(&netstring::to_netstring(file.as_bytes())); std::io::stdout().flush(); } } -- cgit 1.4.1