From 3abddcaf777d8d294f6c541830258ff6ca724c29 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Mon, 20 May 2024 11:52:42 +0300 Subject: [PATCH] add support of raw key to the named field --- lib.nix | 5 ++++- lib.test.nix | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib.nix b/lib.nix index f1de359..9f1fe32 100644 --- a/lib.nix +++ b/lib.nix @@ -39,6 +39,8 @@ let else if isString expr || isPath expr then toString expr else validationError expr "is not a valid string"; + validStringOrRaw = expr: if isRaw expr then expr else validString expr; + validFuncName = fnName: if isString fnName && builtins.stringLength fnName > 0 then raw fnName else validationError fnName "is not a valid function name"; @@ -169,7 +171,7 @@ let isNamedField = expr: getType expr == "table_field"; namedField = name: expr: { _type = "table_field"; - name = validString name; + name = validStringOrRaw name; value = toLua expr; }; @@ -187,6 +189,7 @@ let isValidFieldName = name: isString name && match "^[[:alpha:]_][[:alnum:]_]*$" name == [ ]; toLuaNamedField = name: expr: if isNull expr then null + else if isRaw name then "[${name.raw}] = ${expr}" else if isValidFieldName name then "${name} = ${expr}" else "[${toLuaString name}] = ${expr}"; toLuaTable = onValue: expr: onValue (attrValues (mapAttrs namedField expr)); diff --git a/lib.test.nix b/lib.test.nix index b1eeecf..d2db78b 100644 --- a/lib.test.nix +++ b/lib.test.nix @@ -127,6 +127,13 @@ with nix2lua; pkgs.lib.runTests { ]; expected = ''{ "foo", 10 }''; }; + "test returns named field with a raw in a key" = { + expr = toLua [ + (namedField (raw "foo") 1) + (namedField "foo" 2) + ]; + expected = ''{ [foo] = 1, foo = 2 }''; + }; "test returns raw string" = { expr = toLua (raw "hello"); expected = "hello";