about summary refs log tree commit diff
path: root/tvix/serde
diff options
context:
space:
mode:
authorAspen Smith <root@gws.fyi>2024-02-01T17·28-0500
committeraspen <root@gws.fyi>2024-02-02T16·16+0000
commit5f0f4ea3746d6107839454bb5f4967d8757f5bb8 (patch)
treee618eca064cb7e263c58136f2c07b1dead63f49c /tvix/serde
parent4c5d9fa356bcb6dcd746129dde934412b44fdd35 (diff)
refactor(tvix/eval): Box Value::String r/7467
NixString is *quite* large - like 80 bytes - because of the extra
capacity value for BString and because of the context. We want to keep
Value small since we're passing it around a lot, so let's box the
NixString inside Value::String to save on some memory, and make cloning
ostensibly a little cheaper

Change-Id: I343c8b4e7f61dc3dcbbaba4382efb3b3e5bbabb2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10729
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'tvix/serde')
-rw-r--r--tvix/serde/src/de.rs2
-rw-r--r--tvix/serde/src/de_tests.rs2
2 files changed, 2 insertions, 2 deletions
diff --git a/tvix/serde/src/de.rs b/tvix/serde/src/de.rs
index cf85ffab2e81..6a020c978f64 100644
--- a/tvix/serde/src/de.rs
+++ b/tvix/serde/src/de.rs
@@ -347,7 +347,7 @@ impl<'de> de::Deserializer<'de> for NixDeserializer {
         if let Value::Attrs(attrs) = self.value {
             let mut map = MapDeserializer::new(attrs.into_iter().map(|(k, v)| {
                 (
-                    NixDeserializer::new(Value::String(k)),
+                    NixDeserializer::new(Value::from(k)),
                     NixDeserializer::new(v),
                 )
             }));
diff --git a/tvix/serde/src/de_tests.rs b/tvix/serde/src/de_tests.rs
index 54c2fdf8f7fe..1c3acd1c2f52 100644
--- a/tvix/serde/src/de_tests.rs
+++ b/tvix/serde/src/de_tests.rs
@@ -222,7 +222,7 @@ mod test_builtins {
         match x {
             Value::String(s) => {
                 let new_string = NixString::from(format!("hello {}", s.to_str().unwrap()));
-                Ok(Value::String(new_string))
+                Ok(Value::from(new_string))
             }
             _ => Err(ErrorKind::TypeError {
                 expected: "string",