here is my code
pub struct JsonRespWithCookie<T: Serialize>(pub Result<T, Err>);
impl<T: Serialize> Responder for JsonRespWithCookie<T> {
type Error = Error;
type Future = Pin<Box<dyn Future<Output = Result<HttpResponse, Self::Error>>>>;
fn respond_to(self, req: &HttpRequest) -> Self::Future {
let cookie = req.cookie("token");
let store: Option<Data<Store>> = req.app_data().cloned();
Box::pin(async move {
if let Err(e) = self.0 {
return Err(res!(e, e));
}
let store =
store.ok_or(res!(e, Err::Unknown("no app data in the responder".into())))?;
let mut cookie = cookie.ok_or(res!(e, Err::InvalidCreds))?.value().to_owned();
let creds = check_token(store.clone(), cookie).await.map_err(res!(e))?;
if creds.exp
> chrono::Utc::now().timestamp() - chrono::Duration::minutes(30).num_seconds()
{
cookie = extend_token(store, creds).await.map_err(res!(e))?;
}
Ok(HttpResponse::Ok()
.cookie(Cookie::new("token", cookie))
.json(json!({"success":true,"data":self.0})))
})
}
}
I dont understand why T must have a lifetime since it is not a reference
and here is the error