summaryrefslogtreecommitdiffstats
path: root/lib/generators.nix
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}";
  };
}