use std::rc::Rc;
use vertigo_macro::store;
use crate::{
dev::{SsrFetchCache, SsrFetchRequest, SsrFetchResponse},
struct_mut::ValueMut,
};
use super::api_browser_command;
#[store]
pub fn api_fetch_cache() -> Rc<FetchCache> {
Rc::new(FetchCache {
cache: ValueMut::new(None),
})
}
pub struct FetchCache {
cache: ValueMut<Option<Rc<SsrFetchCache>>>,
}
impl FetchCache {
pub fn get_response(&self, request: &SsrFetchRequest) -> Option<SsrFetchResponse> {
let cache = match self.cache.get() {
Some(cache) => cache,
None => {
let cache = Rc::new(api_browser_command().fetch_cache_get());
self.cache.set(Some(cache.clone()));
cache
}
};
cache.get(request).cloned()
}
}