feat(tvix/eval): implement builtins.toJSON

Implements `Serialize` for `tvix_eval::Value`. Special care is taken
with serialisation of attribute sets, and forcing of thunks.

The tests should cover both cases well.

Change-Id: I9bb135bacf6f87bc6bd0bd88cef0a42308e6c335
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7803
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
This commit is contained in:
Vincent Ambo 2023-01-10 14:52:59 +03:00 committed by clbot
parent fc7e52b4ac
commit 02d35e4aa6
11 changed files with 75 additions and 10 deletions

View file

@ -0,0 +1 @@
"[42,\"hello\",13.37,[],[1,2,3],{},{\"name\":\"foo\",\"value\":42},{\"foo\":42}]"

View file

@ -0,0 +1,11 @@
# tests serialisation of literal data
builtins.toJSON [
42
"hello"
13.37
[ ]
[ 1 2 3 ]
{ }
{ name = "foo"; value = 42; }
{ foo = 42; }
]

View file

@ -0,0 +1 @@
"[42,42,\"42\"]"

View file

@ -0,0 +1,9 @@
let
a = b * 2;
b = 21;
in
builtins.toJSON [
a
((n: n * 2) 21)
(builtins.toJSON a)
]