use crate::{Cache, TakoyakiError};
use reqwest::RequestBuilder;
use serde::{Deserialize, Serialize};
pub struct State {
builder: RequestBuilder,
cache: Cache,
}
impl State {
pub fn new(builder: RequestBuilder, cache: Cache) -> Self {
Self { builder, cache }
}
pub async fn resolve<T>(&self) -> Result<T, TakoyakiError>
where
T: Serialize + for<'de> Deserialize<'de> + std::fmt::Debug,
{
if !self.cache.is_corrupted()? {
return self.cache.get();
}
let response: T = self
.builder
.try_clone()
.unwrap()
.send()
.await?
.json()
.await?;
self.cache.write(&response)?;
Ok(response)
}
}