Add lib.generators.toPreserves

This commit is contained in:
Emery Hemingway 2021-09-02 22:12:54 +02:00
parent 040294dbf2
commit 079be99183
3 changed files with 34 additions and 1 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
result
result-*

View File

@ -4,11 +4,15 @@
inputs.rust.url = "github:oxalica/rust-overlay";
outputs = { self, nixpkgs, rust }:
let forEachSystem = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ];
let
forEachSystem = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ];
libOverlay = import ./lib.nix;
in {
lib = nixpkgs.lib.extend libOverlay;
overlay = final: prev:
with final; {
lib = lib.extend libOverlay;
syndicate-rs = callPackage ./syndicate-rs {
rust = rust-bin.nightly.latest.default;
};

27
lib.nix Normal file
View File

@ -0,0 +1,27 @@
final: prev:
let lib = final;
in with lib; {
generators = with final.generators;
prev.generators // {
toPreserves = { }@args:
v:
let concatItems = lib.strings.concatStringsSep " ";
in if isAttrs v then
"{ ${
concatItems (lib.attrsets.mapAttrsToList
(key: val: "${key}: ${toPreserves args val}") v)
} }"
else if isList v then
"[ ${concatItems (map (toPreserves args) v)} ]"
else if isBool v then
(if v then "#t" else "#f")
else if isFunction v then
abort "generators.toPreserves: cannot convert a function to Preserves"
else if isNull v then
"null"
else
builtins.toJSON v;
};
}