diff options
Diffstat (limited to 'tvix/store/src/pathinfoservice/fs/mod.rs')
-rw-r--r-- | tvix/store/src/pathinfoservice/fs/mod.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/tvix/store/src/pathinfoservice/fs/mod.rs b/tvix/store/src/pathinfoservice/fs/mod.rs index aa64b1c01f16..664cb8bbd54e 100644 --- a/tvix/store/src/pathinfoservice/fs/mod.rs +++ b/tvix/store/src/pathinfoservice/fs/mod.rs @@ -1,10 +1,10 @@ use futures::stream::BoxStream; use futures::StreamExt; use tonic::async_trait; +use tvix_castore::directoryservice::Node; use tvix_castore::fs::{RootNodes, TvixStoreFs}; -use tvix_castore::proto as castorepb; -use tvix_castore::Error; use tvix_castore::{blobservice::BlobService, directoryservice::DirectoryService}; +use tvix_castore::{Error, ValidateNodeError}; use super::PathInfoService; @@ -48,7 +48,7 @@ impl<T> RootNodes for RootNodesWrapper<T> where T: AsRef<dyn PathInfoService> + Send + Sync, { - async fn get_by_basename(&self, name: &[u8]) -> Result<Option<castorepb::node::Node>, Error> { + async fn get_by_basename(&self, name: &[u8]) -> Result<Option<Node>, Error> { let Ok(store_path) = nix_compat::store_path::StorePath::from_bytes(name) else { return Ok(None); }; @@ -61,20 +61,23 @@ where .map(|path_info| { path_info .node + .as_ref() .expect("missing root node") - .node - .expect("empty node") - })) + .try_into() + .map_err(|e: ValidateNodeError| Error::StorageError(e.to_string())) + }) + .transpose()?) } - fn list(&self) -> BoxStream<Result<castorepb::node::Node, Error>> { + fn list(&self) -> BoxStream<Result<Node, Error>> { Box::pin(self.0.as_ref().list().map(|result| { - result.map(|path_info| { + result.and_then(|path_info| { path_info .node + .as_ref() .expect("missing root node") - .node - .expect("empty node") + .try_into() + .map_err(|e: ValidateNodeError| Error::StorageError(e.to_string())) }) })) } |