diff options
author | Florian Klink <flokli@flokli.de> | 2024-05-23T09·06+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-05-23T14·49+0000 |
commit | ec8d79f3db2fc3a5ab7af048209cc2cc5ab14bd3 (patch) | |
tree | 375a80f1d5a013f1d3299f830284a5fc812e29d9 /tvix/eval/src/builtins/mod.rs | |
parent | a4a313cdd28b30eff54b8455f11df9de32640548 (diff) |
feat(tvix/eval): teach builtins.toXML context r/8163
XmlEmitter gains a NixContext field, and `write_typed_value` extends it with all context elements present in the passed value. Once all serialization is done, a into_context() function returns the collected context, so we can construct a NixString with context. Tests for this live in tvix-glue, as we use builtins.derivation, which is not present in the tvix-eval crate. Fixes b/398. Change-Id: I85feaaa17b753885f8a017a54e419ec4e602af21 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11704 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: flokli <flokli@flokli.de> Reviewed-by: Alyssa Ross <hi@alyssa.is>
Diffstat (limited to 'tvix/eval/src/builtins/mod.rs')
-rw-r--r-- | tvix/eval/src/builtins/mod.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index 4a15f944a4b3..2178d9c44f6b 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -1504,8 +1504,19 @@ mod pure_builtins { } let mut buf: Vec<u8> = vec![]; - to_xml::value_to_xml(&mut buf, &value)?; - Ok(buf.into()) + let context = to_xml::value_to_xml(&mut buf, &value)?; + + Ok(( + buf, + // FUTUREWORK: We have a distinction between an empty context, and + // no context at all. Fix this. + if !context.is_empty() { + Some(Box::new(context)) + } else { + None + }, + ) + .into()) } #[builtin("placeholder")] |