forked from jmug/stoatchat
23 lines
707 B
Rust
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>;
|