From 285632320dda85775699eba6b7eedcc47188bd3a Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 25 May 2021 10:53:04 +0200 Subject: [PATCH] lib.types.enum: Improve description for lengths 0 and 1 --- lib/types.nix | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/types.nix b/lib/types.nix index f47a1f92de7..c35f055e17f 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -581,7 +581,17 @@ rec { in mkOptionType rec { name = "enum"; - description = "one of ${concatMapStringsSep ", " show values}"; + description = + # Length 0 or 1 enums may occur in a design pattern with type merging + # where an "interface" module declares an empty enum and other modules + # provide implementations, each extending the enum with their own + # identifier. + if values == [] then + "impossible (empty enum)" + else if builtins.length values == 1 then + "value ${show (builtins.head values)} (singular enum)" + else + "one of ${concatMapStringsSep ", " show values}"; check = flip elem values; merge = mergeEqualOption; functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); };