kutil_http/cache/middleware/
hooks.rs

1use {http::request::*, http::*, kutil_transcoding::*, std::sync::*};
2
3/// Hook to check if a request or a response is cacheable.
4pub type CacheableHook = Arc<Box<dyn Fn(CacheableHookContext) -> bool + Send + Sync>>;
5
6/// Hook to check if a request or a response is encodable.
7pub type EncodableHook = Arc<Box<dyn Fn(EncodableHookContext) -> bool + Send + Sync>>;
8
9/// Hook to update a request's cache key.
10pub type CacheKeyHook<CacheKeyT, RequestBodyT> =
11    Arc<Box<dyn Fn(CacheKeyHookContext<CacheKeyT, RequestBodyT>) + Send + Sync>>;
12
13//
14// CacheableHookContext
15//
16
17/// Context for [CacheableHook].
18#[derive(Clone, Debug)]
19pub struct CacheableHookContext<'own> {
20    /// URI.
21    pub uri: &'own Uri,
22
23    /// Headers.
24    pub headers: &'own HeaderMap,
25}
26
27impl<'own> CacheableHookContext<'own> {
28    /// Constructor.
29    pub fn new(uri: &'own Uri, headers: &'own HeaderMap) -> Self {
30        Self { uri, headers }
31    }
32}
33
34//
35// EncodableHookContext
36//
37
38/// Context for [EncodableHook].
39#[derive(Clone, Debug)]
40pub struct EncodableHookContext<'own> {
41    /// Encoding.
42    pub encoding: &'own Encoding,
43
44    /// URI.
45    pub uri: &'own Uri,
46
47    /// Headers.
48    pub headers: &'own HeaderMap,
49}
50
51impl<'own> EncodableHookContext<'own> {
52    /// Constructor.
53    pub fn new(encoding: &'own Encoding, uri: &'own Uri, headers: &'own HeaderMap) -> Self {
54        Self { encoding, uri, headers }
55    }
56}
57
58//
59// CacheKeyHookContext
60//
61
62/// Context for [CacheKeyHook].
63#[derive(Debug)]
64pub struct CacheKeyHookContext<'own, CacheKeyT, RequestBodyT> {
65    /// Cache key.
66    pub cache_key: &'own mut CacheKeyT,
67
68    /// Request.
69    pub request: &'own Request<RequestBodyT>,
70}
71
72impl<'own, CacheKeyT, RequestBodyT> CacheKeyHookContext<'own, CacheKeyT, RequestBodyT> {
73    /// Constructor.
74    pub fn new(cache_key: &'own mut CacheKeyT, request: &'own Request<RequestBodyT>) -> Self {
75        Self { cache_key, request }
76    }
77}