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:
Connor Brewster 2024-05-06 10:53:52 -05:00 committed by clbot
parent 01a4a2399c
commit da9bc274f3
8 changed files with 19 additions and 68 deletions

View file

@ -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