use std::sync::Arc;
use std::time::Duration;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum RateLimitWait {
Cooldown,
Spacing,
}
impl RateLimitWait {
pub fn as_token(&self) -> &'static str {
match self {
Self::Cooldown => "cooldown",
Self::Spacing => "spacing",
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct RateLimitProgress {
pub kind: RateLimitWait,
pub elapsed: Duration,
pub remaining: Duration,
pub total: Duration,
pub consecutive_blocks: u32,
}
pub type ProgressHook = Arc<dyn Fn(RateLimitProgress) + Send + Sync>;
#[cfg(test)]
mod tests {
use super::RateLimitWait;
#[test]
fn wait_tokens_are_stable() {
assert_eq!(RateLimitWait::Cooldown.as_token(), "cooldown");
assert_eq!(RateLimitWait::Spacing.as_token(), "spacing");
}
}