about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2023-07-31T21·12+0200
committerclbot <clbot@tvl.fyi>2023-07-31T21·50+0000
commit779fad29a12e3dd5206d5a5488ddce517390132e (patch)
treecc23cac419084da20bfcd933267c7f4eca660b29
parent737a6ca01e3ee017834fd310cb942079b5d10446 (diff)
refactor(tvix/nix-compat/derivation): use writer.write_all r/6454
This is more concise than a io::copy of a Cursor to bytes, and we have
everything to be written in memory.

Change-Id: I81f34666aa61aef4e16b33423ce4a69c3781efc3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8997
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Tested-by: BuildkiteCI
-rw-r--r--tvix/nix-compat/src/derivation/mod.rs2
-rw-r--r--tvix/nix-compat/src/derivation/write.rs16
2 files changed, 10 insertions, 8 deletions
diff --git a/tvix/nix-compat/src/derivation/mod.rs b/tvix/nix-compat/src/derivation/mod.rs
index 6a1eee4a81..6ee42bb3ed 100644
--- a/tvix/nix-compat/src/derivation/mod.rs
+++ b/tvix/nix-compat/src/derivation/mod.rs
@@ -47,7 +47,7 @@ impl Derivation {
     ///
     /// The only errors returns are these when writing to the passed writer.
     pub fn serialize(&self, writer: &mut impl std::io::Write) -> Result<(), io::Error> {
-        io::copy(&mut io::Cursor::new(write::DERIVATION_PREFIX), writer)?;
+        writer.write_all(write::DERIVATION_PREFIX.as_bytes())?;
         write::write_char(writer, write::PAREN_OPEN)?;
 
         write::write_outputs(writer, &self.outputs)?;
diff --git a/tvix/nix-compat/src/derivation/write.rs b/tvix/nix-compat/src/derivation/write.rs
index 223ba9ff3f..5937f619b7 100644
--- a/tvix/nix-compat/src/derivation/write.rs
+++ b/tvix/nix-compat/src/derivation/write.rs
@@ -6,9 +6,12 @@
 use crate::derivation::escape::escape_bstr;
 use crate::derivation::output::Output;
 use bstr::BString;
-use std::collections::BTreeSet;
-use std::io::Cursor;
-use std::{collections::BTreeMap, io, io::Error, io::Write};
+use std::{
+    collections::{BTreeMap, BTreeSet},
+    io,
+    io::Error,
+    io::Write,
+};
 
 pub const DERIVATION_PREFIX: &str = "Derive";
 pub const PAREN_OPEN: char = '(';
@@ -22,8 +25,7 @@ pub const QUOTE: char = '"';
 pub(crate) fn write_char(writer: &mut impl Write, c: char) -> io::Result<()> {
     let mut buf = [0; 4];
     let b = c.encode_utf8(&mut buf).as_bytes();
-    io::copy(&mut Cursor::new(b), writer)?;
-    Ok(())
+    writer.write_all(b)
 }
 
 // Write a string `s` as a quoted field to the writer.
@@ -38,9 +40,9 @@ pub(crate) fn write_field<S: AsRef<[u8]>>(
     write_char(writer, QUOTE)?;
 
     if !escape {
-        io::copy(&mut Cursor::new(s), writer)?;
+        writer.write_all(s.as_ref())?;
     } else {
-        io::copy(&mut Cursor::new(escape_bstr(s.as_ref())), writer)?;
+        writer.write_all(&escape_bstr(s.as_ref()))?;
     }
 
     write_char(writer, QUOTE)?;