blob: e93d4b0ec3573a0874bb3402d1faa9d9c02c79ad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
{ lib, ... }:
with lib;
{
lua = {}: rec {
type = with types; let
valueType = nullOr
(oneOf [
bool
int
float
str
(attrsOf valueType)
(listOf valueType)
]) // {
description = "Lua value";
}; in
valueType;
lib = {
mkRaw = value: { inherit value; _type = "raw"; };
};
generate = value:
let
list = l: "{ ${concatMapStringsSep ", " generate l} }";
attrs = a: "{ ${concatStringsSep ", " (mapAttrsToList (name: value: "[${generate name}] = ${generate value}") a)} }";
in
if value ? _type && value._type == "raw" then value.value
else if isInt value then toString value
else if isFloat value then toString value
else if isString value then "'${escape [ "'" ] value }'"
else if true == value then "true"
else if false == value then "false"
else if null == value then "nil"
else if isList value then list value
else if isAttrs value then attrs value
else abort "Lua value not supported: ${toPretty value}";
};
}
|