Allow for symbol keywords too

This commit is contained in:
niten 2022-05-30 16:21:28 -07:00
parent 730709b4e2
commit 6e708bcd8d
1 changed files with 8 additions and 3 deletions

View File

@ -3,10 +3,12 @@
with lib;
let
isSymbol = str: !(isNull (builtins.match "^'.+" str));
stripQuote = str: head (builtins.match "^'(.+)" str);
stripQuote = str:
if (isSymbol str) then head (builtins.match "^'(.+)" str) else str;
parseStr = str: if (isSymbol str) then (stripQuote str) else ''"${str}"'';
parseKeyword = str: if (isSymbol str) then (stripQuote str) else ":${str}";
join-str = concatStringsSep " ";
toEDN = ds:
if isString ds then
parseStr ds
@ -18,7 +20,10 @@ let
"[ ${join-str (map toEDN ds)} ]"
else
(if isAttrs ds then
"{ ${join-str (mapAttrsToList (k: v: ":${k} ${toEDN v}") ds)} }"
"{ ${
join-str
(mapAttrsToList (k: v: ":${parseKeyword k} ${toEDN v}") ds)
} }"
else
throw "unsupported type: ${builtins.typeOf ds}: ${ds}")));