{ definitions, lib, }: let assertValid = data: let assertions = validationAssertions data; failures = lib.filter (assertion: !assertion.assertion) assertions; in assert lib.assertMsg (lib.all (assertion: assertion.assertion) assertions) ( lib.concatMapStringsSep "\n" (assertion: assertion.message) failures ); data; validationAssertions = data: lib.concatLists ( lib.mapAttrsToList ( registryName: registry: let entries = flattenRegistryEntries registryName data.${registryName}; in map (check: { assertion = check.assertion entries; inherit (check) message; }) registry.checks ) definitions ); flattenRegistryEntries = registryName: data: lib.concatLists ( lib.mapAttrsToList ( host: entries: lib.mapAttrsToList (entry: value: { path = "registry.${registryName}.${host}.${entry}"; inherit host entry value; }) entries ) data ); in assertValid