36 lines
1.2 KiB
Nix
36 lines
1.2 KiB
Nix
|
{inputs, cell}: let
|
||
|
namespace = "repo";
|
||
|
|
||
|
|
||
|
yamlToJsonDrv = pkgs: yamlContent: outputPath: (pkgs.runCommand
|
||
|
outputPath { inherit yamlContent; nativeBuildInputs = [ pkgs.yq ]; }
|
||
|
# run yq which outputs '.' (no filter) on file at yamlPath
|
||
|
# note that $out is passed onto the bash/sh script for execution
|
||
|
''
|
||
|
echo "$yamlContent" | yq >$out
|
||
|
'')
|
||
|
{ });
|
||
|
in {
|
||
|
fromYAML = yamlContent: bulitins.fromJSON (builtins.readFile (yamlToJsonDrv inputs.nixpkgs yamlContent "fromYaml.json"));
|
||
|
|
||
|
# ctor
|
||
|
opt-some = a: [a];
|
||
|
opt-none = [];
|
||
|
opt-none_thunk = _: [];
|
||
|
|
||
|
# from-to null
|
||
|
opt-fromNullable = nullable: if nullable == null then [] else [nullable];
|
||
|
opt-toNullable = opt-fork (a:a) (_: null);
|
||
|
|
||
|
opt-map = builtins.map;
|
||
|
opt-filter = builtins.filter;
|
||
|
opt-fork = on_some: on_none: opt: if opt == [] then (on_none null) else (on_some (builtins.elemAt opt 0));
|
||
|
|
||
|
opt-unwrap = opt-fork (a:a) (_: throw "opt-unwrap: expected some, got none");
|
||
|
opt-unwrapOrElse = opt-fork (a:a);
|
||
|
opt-unwrapOr = fallback_val: opt-fork (a:a) (_: fallback_val);
|
||
|
|
||
|
opt-orElse = opt: fallback_opt: opt-fork (opt-some) (opt-none_thunk) (opt ++ fallback_opt);
|
||
|
opt-leftmostSome = opts: builtins.foldl' (opt-orElse) [] opts;
|
||
|
}
|