restless_wasm_cache/
lib.rs1use async_trait::async_trait;
2use restless_gloo::GlooRequest;
3use std::{borrow::Cow, fmt::Debug, hash::Hash};
4use wasm_cache::{CacheItem, Invalidatable};
5
6#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Debug)]
8pub struct CachedRequest<R: GlooRequest + Clone + Ord + Eq + Hash + Debug> {
9 pub prefix: Cow<'static, str>,
11 pub request: R,
13}
14
15impl<R: GlooRequest + Clone + Ord + Eq + Hash + Debug, M: 'static> Invalidatable<M>
16 for CachedRequest<R>
17where
18 R: Invalidatable<M>,
19{
20 fn invalidated_by(&self, value: &M) -> bool {
21 self.request.invalidated_by(value)
22 }
23}
24
25#[async_trait(?Send)]
26impl<
27 R: GlooRequest + PartialEq + Eq + PartialOrd + Ord + Hash + Clone + Debug + 'static,
28 M: 'static,
29 > CacheItem<M> for CachedRequest<R>
30where
31 R::Response: Clone + Debug + PartialEq,
32 R: Invalidatable<M>,
33{
34 type Value = R::Response;
35 type Error = R::Error;
36
37 async fn send(&self) -> Result<Self::Value, Self::Error> {
38 self.request.send_prefix(&self.prefix).await
39 }
40}