about summary refs log tree commit diff
path: root/nix/netstring/attrsToKeyValList.nix
blob: c854b5695502640a898c8a241f1491749d8b5044 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{ 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)