use core::{num::NonZeroU16, time::Duration};
#[derive(Clone, Copy, Debug)]
pub struct RequestLimit {
duration: Duration,
limit: NonZeroU16,
}
impl RequestLimit {
#[inline]
pub fn new(limit: u16, duration: Duration) -> crate::Result<Self> {
Ok(Self { duration, limit: limit.try_into()? })
}
#[
// u16::MAX is greater than 0
allow(clippy::missing_panics_doc, clippy::unwrap_used)
]
#[inline]
pub fn unlimited() -> Self {
Self { duration: Duration::from_secs(0), limit: NonZeroU16::new(u16::MAX).unwrap() }
}
#[inline]
pub const fn duration(&self) -> &Duration {
&self.duration
}
#[inline]
pub fn limit(&self) -> u16 {
self.limit.into()
}
}
#[test]
fn limit_can_not_be_zero() {
assert!(RequestLimit::new(0, <_>::default()).is_err())
}