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

@ -24,6 +24,8 @@ use std::{
rc::Rc,
};
use serde::Serialize;
use crate::{
chunk::Chunk,
errors::{Error, ErrorKind},
@ -329,6 +331,15 @@ impl TotalDisplay for Thunk {
}
}
impl Serialize for Thunk {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.value().serialize(serializer)
}
}
/// A wrapper type for tracking which thunks have already been seen in a
/// context. This is necessary for cycle detection.
///