lib/types: Handle submodules for type "either"
So far the "either" type only handled "flat" types, so you couldn't do something like: type = either int (submodule { options = ...; }); Not only caused this the submodule's options not being checked but also not show up in the documentation. This was something we stumbled on with #13916. Signed-off-by: aszlig <aszlig@redmoonstudios.org> Cc: @edolstra
This commit is contained in:
parent
3c060b93b6
commit
0f0805b51a
@ -246,7 +246,25 @@ rec {
|
||||
either = t1: t2: mkOptionType {
|
||||
name = "${t1.name} or ${t2.name}";
|
||||
check = x: t1.check x || t2.check x;
|
||||
merge = mergeOneOption;
|
||||
merge = loc: defs:
|
||||
if all t1.check (getValues defs) then t1.merge loc defs
|
||||
else if all t2.check (getValues defs) then t2.merge loc defs
|
||||
else throw ( "The option `${showOption loc}' has conflicting"
|
||||
+ " definitions for type either, in"
|
||||
+ " ${showFiles (getFiles defs)}.");
|
||||
|
||||
getSubOptions = prefix: t1.getSubOptions prefix
|
||||
// t2.getSubOptions prefix;
|
||||
|
||||
getSubModules = concatLists (remove null [
|
||||
t1.getSubModules
|
||||
t2.getSubModules
|
||||
]);
|
||||
|
||||
substSubModules = m: let
|
||||
maybeDef = def: r: if r == null then def else r;
|
||||
in either (maybeDef t1 (t1.substSubModules m))
|
||||
(maybeDef t2 (t2.substSubModules m));
|
||||
};
|
||||
|
||||
# Obsolete alternative to configOf. It takes its option
|
||||
|
Loading…
Reference in New Issue
Block a user