some cleanup
This commit is contained in:
parent
f152767145
commit
e42d73e3ff
1 changed files with 30 additions and 24 deletions
54
lib.nix
54
lib.nix
|
@ -18,10 +18,23 @@ let
|
|||
inherit (builtins) isString isFloat isInt isBool isList isAttrs isNull isPath;
|
||||
inherit (builtins) concatStringsSep filter mapAttrs attrValues;
|
||||
|
||||
error = message: throw "[nix2lua] ${message}";
|
||||
################################################################################
|
||||
# Utils
|
||||
################################################################################
|
||||
|
||||
error = message: throw "[nix2lua] ${message}";
|
||||
warn = msg: builtins.trace "[nix2lua] warning: ${msg}";
|
||||
|
||||
getType = expr: if isAttrs expr && expr ? _type then expr._type else null;
|
||||
|
||||
validString = expr:
|
||||
if isString expr || isPath expr then toString expr
|
||||
else error "Value '${toString expr}' is not a valid string";
|
||||
|
||||
################################################################################
|
||||
# Low-Level
|
||||
################################################################################
|
||||
|
||||
isJoin = expr: getType expr == "_join";
|
||||
join = sep: expr:
|
||||
if isList expr then { _type = "_join"; sep = validString sep; parts = expr; }
|
||||
|
@ -31,7 +44,7 @@ let
|
|||
mkLuaRaw = expr:
|
||||
if isLuaRaw expr then
|
||||
{ _type = "raw"; raw = expr.raw; }
|
||||
else if isString expr || isLuaRaw expr then
|
||||
else if isString expr then
|
||||
{ _type = "raw"; raw = expr; }
|
||||
else
|
||||
error "Value '${toString expr}' is not supported for a raw type";
|
||||
|
@ -48,12 +61,23 @@ let
|
|||
++ [ (mkLuaRaw ")") ]
|
||||
);
|
||||
|
||||
toLuaStr = expr: "\"${validString expr}\"";
|
||||
toLuaBool = expr: if expr then "true" else "false";
|
||||
|
||||
isLuaNil = expr: getType expr == "nil";
|
||||
LuaNil = { _type = "nil"; };
|
||||
|
||||
# DEPRECATED
|
||||
mkLuaNil = warn "`mkLuaNil` is deprecated. Use `LuaNil` instead" LuaNil;
|
||||
|
||||
toLuaList = onValue: expr:
|
||||
let
|
||||
wrapObj = expr: "{ ${concatStringsSep ", " expr} }";
|
||||
excludeNull = expr: filter (v: !(isNull v)) expr;
|
||||
in
|
||||
wrapObj (excludeNull (map onValue expr));
|
||||
|
||||
toLuaTable = onValue: expr: onValue (attrValues (mapAttrs mkNamedField expr));
|
||||
|
||||
mkNamedField = name: expr: {
|
||||
_type = "table_field";
|
||||
name = validString name;
|
||||
|
@ -64,8 +88,6 @@ let
|
|||
if isNull expr then null
|
||||
else "[${toLuaStr name}] = ${expr}";
|
||||
|
||||
toLua = val: toLuaInternal 0 val;
|
||||
|
||||
toLuaInternal = depth: expr:
|
||||
let nextDepth = depth + 1; in
|
||||
if isJoin expr then concatStringsSep expr.sep (map (toLuaInternal depth) expr.parts)
|
||||
|
@ -74,32 +96,16 @@ let
|
|||
else if isNamedField expr then
|
||||
if depth > 0 then toLuaNamedField expr.name expr.value
|
||||
else error "You cannot render table field at the top level"
|
||||
else if isAttrs expr then toLuaTable nextDepth expr
|
||||
else if isList expr then toLuaList nextDepth expr
|
||||
else if isAttrs expr then toLuaTable (toLuaInternal nextDepth) expr
|
||||
else if isList expr then toLuaList (toLuaInternal nextDepth) expr
|
||||
else if isString expr || isPath expr then toLuaStr expr
|
||||
else if isFloat expr || isInt expr then toString expr
|
||||
else if isBool expr then toLuaBool expr
|
||||
else if isNull expr then null
|
||||
else error "Value '${toString expr}' is not supported yet";
|
||||
|
||||
toLuaList = depth: expr:
|
||||
wrapObj (excludeNull (map (toLuaInternal depth) expr));
|
||||
toLua = val: toLuaInternal 0 val;
|
||||
|
||||
toLuaTable = depth: expr: toLuaInternal depth (attrValues (mapAttrs mkNamedField expr));
|
||||
|
||||
excludeNull = expr: filter (v: !(isNull v)) expr;
|
||||
|
||||
wrapObj = expr: "{ ${concatStringsSep ", " expr} }";
|
||||
|
||||
toLuaStr = expr: "\"${validString expr}\"";
|
||||
|
||||
toLuaBool = expr: if expr then "true" else "false";
|
||||
|
||||
getType = expr: if isAttrs expr && expr ? _type then expr._type else null;
|
||||
|
||||
validString = expr:
|
||||
if isString expr || isPath expr then toString expr
|
||||
else error "Value '${toString expr}' is not a valid string";
|
||||
in
|
||||
{
|
||||
# low-level
|
||||
|
|
Loading…
Reference in a new issue