feat(registry): validate unique addresses and routes
This commit is contained in:
@@ -16,6 +16,7 @@ let
|
||||
nameValuePair
|
||||
removeSuffix
|
||||
types
|
||||
unique
|
||||
;
|
||||
|
||||
assertionType = types.submodule {
|
||||
@@ -36,6 +37,30 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
validators = {
|
||||
uniqueValue =
|
||||
{
|
||||
value,
|
||||
message,
|
||||
}:
|
||||
entries:
|
||||
let
|
||||
values = map value entries;
|
||||
in
|
||||
[
|
||||
{
|
||||
assertion = builtins.length (unique values) == builtins.length values;
|
||||
inherit message;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
registryLib = lib // {
|
||||
registry = (lib.registry or { }) // {
|
||||
inherit validators;
|
||||
};
|
||||
};
|
||||
|
||||
registryDefinitionModule = {
|
||||
options = {
|
||||
type = mkOption {
|
||||
@@ -76,7 +101,7 @@ let
|
||||
mkRegistry = path:
|
||||
let
|
||||
evaluated = lib.evalModules {
|
||||
specialArgs = { inherit lib; };
|
||||
specialArgs.lib = registryLib;
|
||||
modules = [
|
||||
registryDefinitionModule
|
||||
path
|
||||
@@ -189,7 +214,7 @@ let
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit definitions;
|
||||
inherit definitions validators;
|
||||
|
||||
module = {
|
||||
options.registry = mapAttrs (_name: registry: registryOption registry) definitions;
|
||||
|
||||
Reference in New Issue
Block a user