refactor(tvix): remove usage of async-recursion
Rust 1.77 supports async recursion as long as there is some form of indirection (ie. `Box::pin`). This removes the need to use the async-recursion crate. Change-Id: Ic9613ab7f32016f0103032a861edff92e2fb8b41 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11596 Reviewed-by: flokli <flokli@flokli.de> Autosubmit: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI
This commit is contained in:
parent
01a4a2399c
commit
da9bc274f3
8 changed files with 19 additions and 68 deletions
|
|
@ -1,4 +1,3 @@
|
|||
use async_recursion::async_recursion;
|
||||
use nix_compat::nar::reader::r#async as nar_reader;
|
||||
use tokio::{io::AsyncBufRead, sync::mpsc, try_join};
|
||||
use tvix_castore::{
|
||||
|
|
@ -54,10 +53,9 @@ where
|
|||
Ok(node.rename("".into()))
|
||||
}
|
||||
|
||||
#[async_recursion]
|
||||
async fn produce_nar_inner<'a: 'async_recursion, 'r: 'async_recursion, BS>(
|
||||
async fn produce_nar_inner<BS>(
|
||||
blob_service: BS,
|
||||
node: nar_reader::Node<'a, 'r>,
|
||||
node: nar_reader::Node<'_, '_>,
|
||||
path: PathBuf,
|
||||
tx: mpsc::Sender<Result<IngestionEntry, Error>>,
|
||||
) -> Result<IngestionEntry, Error>
|
||||
|
|
@ -93,8 +91,13 @@ where
|
|||
path.try_push(&entry.name)
|
||||
.expect("Tvix bug: failed to join name");
|
||||
|
||||
let entry =
|
||||
produce_nar_inner(blob_service.clone(), entry.node, path, tx.clone()).await?;
|
||||
let entry = Box::pin(produce_nar_inner(
|
||||
blob_service.clone(),
|
||||
entry.node,
|
||||
path,
|
||||
tx.clone(),
|
||||
))
|
||||
.await?;
|
||||
|
||||
tx.send(Ok(entry)).await.map_err(|e| {
|
||||
Error::IO(std::io::Error::new(std::io::ErrorKind::BrokenPipe, e))
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
use crate::utils::AsyncIoBridge;
|
||||
|
||||
use super::RenderError;
|
||||
use async_recursion::async_recursion;
|
||||
use count_write::CountWrite;
|
||||
use nix_compat::nar::writer::r#async as nar_writer;
|
||||
use sha2::{Digest, Sha256};
|
||||
|
|
@ -72,9 +71,8 @@ where
|
|||
|
||||
/// Process an intermediate node in the structure.
|
||||
/// This consumes the node.
|
||||
#[async_recursion]
|
||||
async fn walk_node<BS, DS>(
|
||||
nar_node: nar_writer::Node<'async_recursion, '_>,
|
||||
nar_node: nar_writer::Node<'_, '_>,
|
||||
proto_node: &castorepb::node::Node,
|
||||
blob_service: BS,
|
||||
directory_service: DS,
|
||||
|
|
@ -164,9 +162,13 @@ where
|
|||
.await
|
||||
.map_err(RenderError::NARWriterError)?;
|
||||
|
||||
(blob_service, directory_service) =
|
||||
walk_node(child_node, &proto_node, blob_service, directory_service)
|
||||
.await?;
|
||||
(blob_service, directory_service) = Box::pin(walk_node(
|
||||
child_node,
|
||||
&proto_node,
|
||||
blob_service,
|
||||
directory_service,
|
||||
))
|
||||
.await?;
|
||||
}
|
||||
|
||||
// close the directory
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue