snix_castore/blob_engine/
mod.rs1use auto_impl::auto_impl;
2use tonic::async_trait;
3
4mod chunking;
5pub mod concurrent_uploads;
6
7pub use chunking::ChunkingBlobEngine;
8
9use crate::B3Digest;
10
11#[cfg_attr(any(test, feature = "mocks"), mockall::automock)]
13#[async_trait]
14#[auto_impl(&, &mut, Arc, Box)]
15pub trait BlobEngine: Send + Sync {
16 async fn has(&self, digest: &B3Digest) -> Result<bool, Error>;
18
19 async fn open_read(
22 &self,
23 digest: &B3Digest,
24 size_hint: Option<u64>,
25 ) -> Result<Option<Box<dyn crate::blobstore::Reader + 'static>>, Error>;
26
27 async fn open_write<'a>(&'a self) -> Box<dyn crate::blobstore::Writer + 'a>;
32}
33
34#[derive(thiserror::Error, Debug)]
35#[error(transparent)]
36pub struct Error(#[from] Box<dyn std::error::Error + Send + Sync + 'static>);