Files
handmade-revolt-backend/src/util/ratelimit.rs
2021-08-06 17:24:16 +01:00

23 lines
707 B
Rust

use rocket_governor::{Method, Quota, RocketGovernable, RocketGovernor, NonZeroU32};
use phf::phf_map;
pub struct RateLimitGuard;
static ROUTE_QUOTAS: phf::Map<&'static str, &'static Quota> = phf_map! {
"message_send" => &Quota::per_second(NonZeroU32::new(1u32).unwrap())
.allow_burst(NonZeroU32::new(10u32).unwrap())
};
impl<'r> RocketGovernable<'r> for RateLimitGuard {
fn quota(_method: Method, route: &str) -> Quota {
if let Some(q) = ROUTE_QUOTAS.get(route) {
**q
} else {
Quota::per_second(Self::nonzero(1u32))
.allow_burst(Self::nonzero(5u32))
}
}
}
pub type RateLimited<'a> = RocketGovernor<'a, RateLimitGuard>;