diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/lib/gvariant.nix | 15 | ||||
-rw-r--r-- | modules/lib/types.nix | 2 |
2 files changed, 17 insertions, 0 deletions
diff --git a/modules/lib/gvariant.nix b/modules/lib/gvariant.nix index 83951c2071e..3bfa18cb4db 100644 --- a/modules/lib/gvariant.nix +++ b/modules/lib/gvariant.nix @@ -18,6 +18,7 @@ let type = { arrayOf = t: "a${t}"; + maybeOf = t: "m${t}"; tupleOf = ts: "(${concatStrings ts})"; string = "s"; boolean = "b"; @@ -57,11 +58,21 @@ let else ""; + mkMaybe = elemType: elem: + mkPrimitive (type.maybeOf elemType) elem // { + __toString = self: + if self.value == null then + "@${self.type} nothing" + else + "just ${toString self.value}"; + }; + in rec { inherit type typeOf; isArray = hasPrefix "a"; + isMaybe = hasPrefix "m"; isTuple = hasPrefix "("; # Returns the GVariant value that most closely matches the given Nix @@ -92,6 +103,10 @@ in rec { mkEmptyArray = elemType: mkArray elemType [ ]; + mkNothing = elemType: mkMaybe elemType null; + + mkJust = elem: let gvarElem = mkValue elem; in mkMaybe gvarElem.type gvarElem; + mkTuple = elems: let gvarElems = map mkValue elems; diff --git a/modules/lib/types.nix b/modules/lib/types.nix index 46db1157d90..64a6b4a34fa 100644 --- a/modules/lib/types.nix +++ b/modules/lib/types.nix @@ -77,6 +77,8 @@ in rec { (map (d: d // { value = d.value.value; }) vdefs) else if gvar.isTuple sharedDefType && allChecked then mergeOneOption loc defs + else if gvar.isMaybe sharedDefType && allChecked then + mergeOneOption loc defs else if gvar.type.string == sharedDefType && allChecked then types.str.merge loc defs else if gvar.type.double == sharedDefType && allChecked then |