refactor(tvix): use AsRef<dyn …> instead of Deref<Target= …>
Removes some more needs for Arcs. Change-Id: I9a9f4b81641c271de260e9ffa98313a32944d760 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10578 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
This commit is contained in:
parent
8fbdf72825
commit
89882ff9b1
8 changed files with 58 additions and 69 deletions
|
|
@ -1,6 +1,5 @@
|
|||
use futures::Stream;
|
||||
use futures::StreamExt;
|
||||
use std::ops::Deref;
|
||||
use std::pin::Pin;
|
||||
use tonic::async_trait;
|
||||
use tvix_castore::fs::{RootNodes, TvixStoreFs};
|
||||
|
|
@ -21,9 +20,9 @@ pub fn make_fs<BS, DS, PS>(
|
|||
list_root: bool,
|
||||
) -> TvixStoreFs<BS, DS, RootNodesWrapper<PS>>
|
||||
where
|
||||
BS: Deref<Target = dyn BlobService> + Send + Clone + 'static,
|
||||
DS: Deref<Target = dyn DirectoryService> + Send + Clone + 'static,
|
||||
PS: Deref<Target = dyn PathInfoService> + Send + Sync + Clone + 'static,
|
||||
BS: AsRef<dyn BlobService> + Send + Clone + 'static,
|
||||
DS: AsRef<dyn DirectoryService> + Send + Clone + 'static,
|
||||
PS: AsRef<dyn PathInfoService> + Send + Sync + Clone + 'static,
|
||||
{
|
||||
TvixStoreFs::new(
|
||||
blob_service,
|
||||
|
|
@ -46,7 +45,7 @@ pub struct RootNodesWrapper<T>(pub(crate) T);
|
|||
#[async_trait]
|
||||
impl<T> RootNodes for RootNodesWrapper<T>
|
||||
where
|
||||
T: Deref<Target = dyn PathInfoService> + Send + Sync,
|
||||
T: AsRef<dyn PathInfoService> + Send + Sync,
|
||||
{
|
||||
async fn get_by_basename(&self, name: &[u8]) -> Result<Option<castorepb::node::Node>, Error> {
|
||||
let Ok(store_path) = nix_compat::store_path::StorePath::from_bytes(name) else {
|
||||
|
|
@ -55,7 +54,7 @@ where
|
|||
|
||||
Ok(self
|
||||
.0
|
||||
.deref()
|
||||
.as_ref()
|
||||
.get(*store_path.digest())
|
||||
.await?
|
||||
.map(|path_info| {
|
||||
|
|
@ -68,7 +67,7 @@ where
|
|||
}
|
||||
|
||||
fn list(&self) -> Pin<Box<dyn Stream<Item = Result<castorepb::node::Node, Error>> + Send>> {
|
||||
Box::pin(self.0.deref().list().map(|result| {
|
||||
Box::pin(self.0.as_ref().list().map(|result| {
|
||||
result.map(|path_info| {
|
||||
path_info
|
||||
.node
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use std::{ops::Deref, path::Path, sync::Arc};
|
||||
use std::{path::Path, sync::Arc};
|
||||
|
||||
use data_encoding::BASE64;
|
||||
use nix_compat::store_path::{self, StorePath};
|
||||
|
|
@ -53,9 +53,9 @@ pub async fn import_path<BS, DS, PS, P>(
|
|||
) -> Result<StorePath, std::io::Error>
|
||||
where
|
||||
P: AsRef<Path> + std::fmt::Debug,
|
||||
BS: Deref<Target = dyn BlobService> + Clone,
|
||||
DS: Deref<Target = dyn DirectoryService>,
|
||||
PS: Deref<Target = dyn PathInfoService>,
|
||||
BS: AsRef<dyn BlobService> + Clone,
|
||||
DS: AsRef<dyn DirectoryService>,
|
||||
PS: AsRef<dyn PathInfoService>,
|
||||
{
|
||||
// calculate the name
|
||||
// TODO: make a path_to_name helper function?
|
||||
|
|
@ -71,15 +71,14 @@ where
|
|||
})?;
|
||||
|
||||
// Ingest the path into blob and directory service.
|
||||
let root_node =
|
||||
tvix_castore::import::ingest_path(blob_service, &directory_service.deref(), &path)
|
||||
.await
|
||||
.expect("failed to ingest path");
|
||||
let root_node = tvix_castore::import::ingest_path(blob_service, &directory_service, &path)
|
||||
.await
|
||||
.expect("failed to ingest path");
|
||||
|
||||
debug!(root_node =?root_node, "import successful");
|
||||
|
||||
// Ask the PathInfoService for the NAR size and sha256
|
||||
let (nar_size, nar_sha256) = path_info_service.calculate_nar(&root_node).await?;
|
||||
let (nar_size, nar_sha256) = path_info_service.as_ref().calculate_nar(&root_node).await?;
|
||||
|
||||
// Calculate the output path. This might still fail, as some names are illegal.
|
||||
let output_path = store_path::build_nar_based_store_path(&nar_sha256, name).map_err(|_| {
|
||||
|
|
@ -115,7 +114,7 @@ where
|
|||
|
||||
// put into [PathInfoService], and return the PathInfo that we get back
|
||||
// from there (it might contain additional signatures).
|
||||
let _path_info = path_info_service.put(path_info).await?;
|
||||
let _path_info = path_info_service.as_ref().put(path_info).await?;
|
||||
|
||||
Ok(output_path.to_owned())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue