mithril_common/digesters/cache/
provider.rs1use std::collections::BTreeMap;
2use std::io;
3
4use async_trait::async_trait;
5use thiserror::Error;
6
7use crate::digesters::ImmutableFile;
8use crate::entities::{HexEncodedDigest, ImmutableFileName};
9use crate::StdError;
10
11pub type CacheProviderResult<T> = Result<T, ImmutableDigesterCacheProviderError>;
13
14#[derive(Error, Debug)]
16pub enum ImmutableDigesterCacheProviderError {
17 #[error("Could not store immutable file digests cache")]
19 Store(#[from] ImmutableDigesterCacheStoreError),
20
21 #[error("Could not read immutable file digests cache")]
23 Get(#[from] ImmutableDigesterCacheGetError),
24}
25
26#[derive(Error, Debug)]
28pub enum ImmutableDigesterCacheStoreError {
29 #[error("IO error when storing cache")]
31 Io(#[from] io::Error),
32
33 #[error("IO error when serializing json cache")]
35 JsonSerialization(#[from] serde_json::Error),
36
37 #[error("Underlying store raised an error when storing cache")]
39 StoreError(#[source] StdError),
40}
41
42#[derive(Error, Debug)]
44pub enum ImmutableDigesterCacheGetError {
45 #[error("IO error when getting cache")]
47 Io(#[from] io::Error),
48
49 #[error("IO error when deserializing json cache")]
51 JsonDeserialization(#[from] serde_json::Error),
52
53 #[error("Underlying store raised an error when getting cache")]
55 StoreError(#[source] StdError),
56}
57
58#[cfg_attr(test, mockall::automock)]
60#[async_trait]
61pub trait ImmutableFileDigestCacheProvider: Sync + Send {
62 async fn store(
64 &self,
65 digest_per_filenames: Vec<(ImmutableFileName, HexEncodedDigest)>,
66 ) -> CacheProviderResult<()>;
67
68 async fn get(
70 &self,
71 immutables: Vec<ImmutableFile>,
72 ) -> CacheProviderResult<BTreeMap<ImmutableFile, Option<HexEncodedDigest>>>;
73
74 async fn reset(&self) -> CacheProviderResult<()>;
76}