diff options
author | Florian Klink <flokli@flokli.de> | 2024-03-23T22·42+0100 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-03-24T20·01+0000 |
commit | f5cf6592455d5178e829984c76f2df5037319272 (patch) | |
tree | cb6130243d89da6d43f612786e3f408d21bc27d0 | |
parent | 3ece32bbf9078f44d2c38098697e9a1cfaebd00c (diff) |
feat(tvix/castore): AsRef<dyn BlobService> impl BlobService r/7778
This allows us to use containers around BlobServices as BlobServices too. Change-Id: I3c7feb074f42b4e07c550fb8dfa63cf81d448ab5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11249 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
-rw-r--r-- | tvix/castore/src/blobservice/mod.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tvix/castore/src/blobservice/mod.rs b/tvix/castore/src/blobservice/mod.rs index 5eb88a479427..e9cbd190623a 100644 --- a/tvix/castore/src/blobservice/mod.rs +++ b/tvix/castore/src/blobservice/mod.rs @@ -61,6 +61,28 @@ pub trait BlobService: Send + Sync { } } +#[async_trait] +impl<A> BlobService for A +where + A: AsRef<dyn BlobService> + Send + Sync, +{ + async fn has(&self, digest: &B3Digest) -> io::Result<bool> { + self.as_ref().has(digest).await + } + + async fn open_read(&self, digest: &B3Digest) -> io::Result<Option<Box<dyn BlobReader>>> { + self.as_ref().open_read(digest).await + } + + async fn open_write(&self) -> Box<dyn BlobWriter> { + self.as_ref().open_write().await + } + + async fn chunks(&self, digest: &B3Digest) -> io::Result<Option<Vec<ChunkMeta>>> { + self.as_ref().chunks(digest).await + } +} + /// A [tokio::io::AsyncWrite] that the user needs to close() afterwards for persist. /// On success, it returns the digest of the written blob. #[async_trait] |