about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-11-12T11·32+0100
committerflokli <flokli@flokli.de>2024-11-12T14·05+0000
commitb1764e11092f7817633ae013508e6285585ac1cf (patch)
tree85a5091fa75c9a24f49404e968fbeb9a8b3a3f44
parent0b8ec03797bc8ace0e1db979ae87a00be2c98733 (diff)
refactor(nix-compat/nix_daemon): drop Sync requirement for StorePath r/8915
By manually writing out the async function, and moving the owned String
we can avoid for S to be Sync in the NixSerialize for StorePath<S> impl.

Co-Authored-By: edef@edef.eu
Change-Id: I8427b38d2bd61de2818088728cbad79cda69d17d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12764
Reviewed-by: Vladimir Kryachko <v.kryachko@gmail.com>
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: edef <edef@edef.eu>
Tested-by: BuildkiteCI
-rw-r--r--tvix/nix-compat/src/nix_daemon/types.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/tvix/nix-compat/src/nix_daemon/types.rs b/tvix/nix-compat/src/nix_daemon/types.rs
index 33b74f37574f..db7d26321e3e 100644
--- a/tvix/nix-compat/src/nix_daemon/types.rs
+++ b/tvix/nix-compat/src/nix_daemon/types.rs
@@ -1,5 +1,3 @@
-use nix_compat_derive::{NixDeserialize, NixSerialize};
-
 use crate::{
     narinfo::Signature,
     nixhash::CAHash,
@@ -9,6 +7,8 @@ use crate::{
         ser::{NixSerialize, NixWrite},
     },
 };
+use nix_compat_derive::{NixDeserialize, NixSerialize};
+use std::future::Future;
 
 /// Marker type that consumes/sends and ignores a u64.
 #[derive(Clone, Debug, NixDeserialize, NixSerialize)]
@@ -128,13 +128,14 @@ impl NixDeserialize for StorePath<String> {
 // Custom implementation since Display does not use absolute paths.
 impl<S> NixSerialize for StorePath<S>
 where
-    S: AsRef<str> + Sync,
+    S: AsRef<str>,
 {
-    async fn serialize<W>(&self, writer: &mut W) -> Result<(), W::Error>
+    fn serialize<W>(&self, writer: &mut W) -> impl Future<Output = Result<(), W::Error>> + Send
     where
         W: NixWrite,
     {
-        writer.write_value(&self.to_absolute_path()).await
+        let sp = self.to_absolute_path();
+        async move { writer.write_value(&sp).await }
     }
 }