1use actix_web::{HttpMessage, HttpRequest};
2use crate::store::Store;
3
4#[derive(Clone, Default)]
5pub struct RateLimitByPass<T: Store + 'static> {
6 pub(crate) value: Option<<T as Store>::Value>,
7}
8
9impl<T: Store + 'static> RateLimitByPass<T> {
10 pub(crate) fn checked(req: &HttpRequest) -> bool {
11 Self::from_request(req).is_some()
12 }
13
14 pub(crate) fn check(req: &HttpRequest, value: Option<<T as Store>::Value>) {
15 let rl = RateLimitByPass::<T> { value };
16 req.extensions_mut().insert(rl);
17 }
18
19 pub fn get_value(&self) -> Option<&<T as Store>::Value> {
20 self.value.as_ref()
21 }
22
23 pub fn from_request(req: &HttpRequest) -> Option<RateLimitByPass<T>> {
24 req.extensions().get::<RateLimitByPass<T>>().cloned()
25 }
26}