use super::super::weight::*;
use {
http::{header::*, uri::*, *},
std::{fmt, hash::*},
};
pub trait CacheKey
where
Self: 'static + Clone + fmt::Display + Eq + Hash + Send + CacheWeight + Sync,
{
fn for_request(method: &Method, uri: &Uri, headers: &HeaderMap) -> Self;
}
pub trait CacheKeyForRequest<CacheKeyT> {
fn cache_key(&self) -> CacheKeyT;
}
impl<RequestBodyT, CacheKeyT> CacheKeyForRequest<CacheKeyT> for Request<RequestBodyT>
where
CacheKeyT: CacheKey,
{
fn cache_key(&self) -> CacheKeyT {
CacheKeyT::for_request(self.method(), self.uri(), self.headers())
}
}