diff --git a/lib.nix b/lib.nix index 74ecf12..f2ae92e 100644 --- a/lib.nix +++ b/lib.nix @@ -22,8 +22,16 @@ let warn = msg: builtins.trace "[nix2lua] warning: ${msg}"; - mkLuaRaw = raw: { _type = "raw"; inherit raw; }; isLuaRaw = expr: getType expr == "raw"; + mkLuaRaw = expr: + if isLuaRaw expr then + { _type = "raw"; raw = expr.raw; } + else if isString expr || isLuaRaw expr then + { _type = "raw"; raw = expr; } + else + error "Value '${toString expr}' is not supported for a raw type"; + + # mkCall = fnName: args: mkLuaRaw LuaNil = { _type = "nil"; }; isLuaNil = expr: getType expr == "nil"; diff --git a/lib.test.nix b/lib.test.nix index bc50a44..a4ccf2b 100644 --- a/lib.test.nix +++ b/lib.test.nix @@ -108,6 +108,10 @@ pkgs.lib.runTests { expr = toLua (mkLuaRaw "hello"); expected = "hello"; }; + "test returns deep raw string" = { + expr = toLua (mkLuaRaw (mkLuaRaw (mkLuaRaw "hello"))); + expected = "hello"; + }; "test returns path as string" = { expr = toLua /foo/bar; expected = "\"/foo/bar\"";