Moving to toplevel so I can use them with `runExecline`. They should be pretty atomic, and are proven to work (tests are still in my user dir, since they test the producers indirectly via the python parser and I don’t want to pull it out right now). Change-Id: Id0baa3adcb2ec646458a104c7868c2889b8c64f5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3054 Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
		
			
				
	
	
		
			33 lines
		
	
	
	
		
			953 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			953 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ depot, lib, ... }:
 | 
						|
 | 
						|
# Convert an attrset of strings to a list of key/value netstring pairs.
 | 
						|
# A good minimally viable json replacement if all you need is to iterate.
 | 
						|
# You can use e.g. `forstdin -Ed '' item` in execline to split the items
 | 
						|
# and then get the key and value via `multidefine -d '' $item { key value }`
 | 
						|
#
 | 
						|
# Example:
 | 
						|
#   { foo = "bar"; x = "abc"; }
 | 
						|
#   => "12:3:foo,3:bar,,10:1:x,3:abc,,"
 | 
						|
#
 | 
						|
# Example with runExecline:
 | 
						|
#   nix.runExecline "test" {
 | 
						|
#     stdin = nix.netstring.attrsToKeyValList {
 | 
						|
#       foo = "bar";
 | 
						|
#       x = "abc";
 | 
						|
#     };
 | 
						|
#   } [
 | 
						|
#     "forstdin" "-Ed" "" "item"
 | 
						|
#     "multidefine" "-d" "" "$item" [ "key" "value" ]
 | 
						|
#     "${pkgs.coreutils}/bin/echo" "\${key} -> \${value}"
 | 
						|
#   ]
 | 
						|
 | 
						|
#   will print:
 | 
						|
#     foo -> bar
 | 
						|
#     x -> abc
 | 
						|
attrs:
 | 
						|
lib.concatStrings
 | 
						|
  (lib.mapAttrsToList
 | 
						|
    (k: v: depot.nix.netstring.fromString
 | 
						|
       ( depot.nix.netstring.fromString k
 | 
						|
       + depot.nix.netstring.fromString v))
 | 
						|
    attrs)
 |