query
On this page

nullOr

lib.types.nullOr

Docs pulled from | This Revision | 38 minutes ago


Null or value of ...


Noogle detected

Implementation

The following is the current implementation of this function.

nullOr =
    elemType:
    mkOptionType rec {
      name = "nullOr";
      description = "null or ${
        optionDescriptionPhrase (class: class == "noun" || class == "conjunction") elemType
      }";
      descriptionClass = "conjunction";
      check = x: x == null || elemType.check x;
      merge =
        loc: defs:
        let
          nrNulls = count (def: def.value == null) defs;
        in
        if nrNulls == length defs then
          null
        else if nrNulls != 0 then
          throw "The option `${showOption loc}` is defined both null and not null, in ${showFiles (getFiles defs)}."
        else
          elemType.merge loc defs;
      emptyValue = {
        value = null;
      };
      getSubOptions = elemType.getSubOptions;
      getSubModules = elemType.getSubModules;
      substSubModules = m: nullOr (elemType.substSubModules m);
      functor = (elemTypeFunctor name { inherit elemType; }) // {
        type = payload: lib.types.nullOr payload.elemType;
      };
      nestedTypes.elemType = elemType;
    };