restless_wasm_cache/
lib.rs

1use async_trait::async_trait;
2use restless_gloo::GlooRequest;
3use std::{borrow::Cow, fmt::Debug, hash::Hash};
4use wasm_cache::{CacheItem, Invalidatable};
5
6/// Cached request.
7#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Debug)]
8pub struct CachedRequest<R: GlooRequest + Clone + Ord + Eq + Hash + Debug> {
9    /// Prefix of request URI.
10    pub prefix: Cow<'static, str>,
11    /// Request to send.
12    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}