mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-10 03:23:29 +03:00
lib.types.functionTo: Support type merging
This commit is contained in:
parent
f771d39750
commit
06da97fc3a
3 changed files with 62 additions and 0 deletions
|
@ -290,6 +290,7 @@ checkConfigOutput '^"a b"$' config.result ./functionTo/merging-list.nix
|
||||||
checkConfigError 'A definition for option .fun.\[function body\]. is not of type .string.. Definition values:\n\s*- In .*wrong-type.nix' config.result ./functionTo/wrong-type.nix
|
checkConfigError 'A definition for option .fun.\[function body\]. is not of type .string.. Definition values:\n\s*- In .*wrong-type.nix' config.result ./functionTo/wrong-type.nix
|
||||||
checkConfigOutput '^"b a"$' config.result ./functionTo/list-order.nix
|
checkConfigOutput '^"b a"$' config.result ./functionTo/list-order.nix
|
||||||
checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
|
checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
|
||||||
|
checkConfigOutput '^"fun.\[function body\].a fun.\[function body\].b"$' config.result ./functionTo/submodule-options.nix
|
||||||
|
|
||||||
# moduleType
|
# moduleType
|
||||||
checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
|
checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
|
||||||
|
|
59
lib/tests/modules/functionTo/submodule-options.nix
Normal file
59
lib/tests/modules/functionTo/submodule-options.nix
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{ lib, config, options, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib) types;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
|
||||||
|
# fun.<function-body>.a
|
||||||
|
({ ... }: {
|
||||||
|
options = {
|
||||||
|
fun = lib.mkOption {
|
||||||
|
type = types.functionTo (types.submodule {
|
||||||
|
options.a = lib.mkOption { };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|
||||||
|
# fun.<function-body>.b
|
||||||
|
({ ... }: {
|
||||||
|
options = {
|
||||||
|
fun = lib.mkOption {
|
||||||
|
type = types.functionTo (types.submodule {
|
||||||
|
options.b = lib.mkOption { };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
options = {
|
||||||
|
result = lib.mkOption
|
||||||
|
{
|
||||||
|
type = types.str;
|
||||||
|
default = lib.concatStringsSep " "
|
||||||
|
(lib.concatLists
|
||||||
|
(lib.mapAttrsToList
|
||||||
|
(k: v:
|
||||||
|
if k == "_module"
|
||||||
|
then [ ]
|
||||||
|
else [ (lib.showOption v.loc) ]
|
||||||
|
)
|
||||||
|
(
|
||||||
|
(options.fun.type.getSubOptions [ "fun" ])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config.fun = lib.mkMerge
|
||||||
|
[
|
||||||
|
(input: { inherit (input) a; })
|
||||||
|
(input: { inherit (input) b; })
|
||||||
|
(input: {
|
||||||
|
b = lib.mkForce input.c;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
|
@ -529,6 +529,8 @@ rec {
|
||||||
getSubOptions = elemType.getSubOptions;
|
getSubOptions = elemType.getSubOptions;
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: functionTo (elemType.substSubModules m);
|
substSubModules = m: functionTo (elemType.substSubModules m);
|
||||||
|
functor = (defaultFunctor "functionTo") // { wrapped = elemType; };
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
# A submodule (like typed attribute set). See NixOS manual.
|
# A submodule (like typed attribute set). See NixOS manual.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue