From 02d35e4aa6ef84cdbd01d881bdc5c1acd50fc7dc Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 10 Jan 2023 14:52:59 +0300 Subject: 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 Tested-by: BuildkiteCI Autosubmit: tazjin --- tvix/eval/src/value/string.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'tvix/eval/src/value/string.rs') diff --git a/tvix/eval/src/value/string.rs b/tvix/eval/src/value/string.rs index 93cbc98dab9c..5962c94ea51f 100644 --- a/tvix/eval/src/value/string.rs +++ b/tvix/eval/src/value/string.rs @@ -9,16 +9,17 @@ use std::path::Path; use std::{borrow::Cow, fmt::Display, str::Chars}; use serde::de::{Deserializer, Visitor}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Serialize)] +#[serde(untagged)] enum StringRepr { Smol(SmolStr), Heap(String), } #[repr(transparent)] -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Serialize)] pub struct NixString(StringRepr); impl PartialEq for NixString { -- cgit 1.4.1