query
On this page

nullOr

lib.types.nullOr

Docs pulled from | This Revision | 10 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: types.nullOr payload.elemType;
          };
          nestedTypes.elemType = elemType;
        };