actix_rl/
utils.rs

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}