dnf-test/dnf/lib/attrs.nix
2025-10-27 00:08:16 -02:00

31 lines
647 B
Nix

# TODO: Mettre en place la librairie
{ lib }:
with lib;
{
# Merge profond d'attributs
mergeDeep =
lhs: rhs:
lhs
// mapAttrs (
name: value:
if isAttrs value && lhs ? ${name} && isAttrs lhs.${name} then mergeDeep lhs.${name} value else value
) rhs;
# Filtre les attributs avec une condition
filterAttrsRecursive =
pred: set:
listToAttrs (
concatMap (
name:
let
value = set.${name};
in
optional (pred name value) (
nameValuePair name (if isAttrs value then filterAttrsRecursive pred value else value)
)
) (attrNames set)
);
}