diff options
Diffstat (limited to '4lib/krebs/dns.nix')
| -rw-r--r-- | 4lib/krebs/dns.nix | 31 | 
1 files changed, 31 insertions, 0 deletions
diff --git a/4lib/krebs/dns.nix b/4lib/krebs/dns.nix new file mode 100644 index 000000000..b2cf3c24c --- /dev/null +++ b/4lib/krebs/dns.nix @@ -0,0 +1,31 @@ +{ lib, ... }: + +let +  listset = import ./listset.nix { inherit lib; }; +in + +with builtins; +with lib; + +rec { +  # label = string + +  # TODO does it make sense to have alias = list label? + +  # split-by-provider : +  #   [[label]] -> tree label provider -> listset provider alias +  split-by-provider = as: providers: +    foldl (m: a: listset.insert (provider-of a providers) a m) {} as; + +  # provider-of : alias -> tree label provider -> provider +  # Note that we cannot use tree.get here, because path can be longer +  # than the tree depth. +  provider-of = a: +    let +      go = path: tree: +        if typeOf tree == "string" +          then tree +          else go (tail path) tree.${head path}; +    in +    go (reverseList (splitString "." a)); +}  | 
