This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { lib, pkgs, depot, ... }:
 | |
| let
 | |
|   toNetstring = s:
 | |
|     "${toString (builtins.stringLength s)}:${s},";
 | |
| 
 | |
|   toNetstringList = xs:
 | |
|     lib.concatStrings (map toNetstring xs);
 | |
| 
 | |
|   toNetstringKeyVal = attrs:
 | |
|     lib.concatStrings
 | |
|       (lib.mapAttrsToList
 | |
|         (k: v: toNetstring (toNetstring k + toNetstring v))
 | |
|         attrs);
 | |
| 
 | |
|   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
 | |
|     ;
 | |
| }
 |