use std::time::Duration;
pub(super) struct RetryTracker {
failure_start: tokio::time::Instant,
num_failures: u64,
new_failure: bool,
}
impl RetryTracker {
pub(super) fn new() -> Self {
Self {
failure_start: tokio::time::Instant::now(),
num_failures: 0,
new_failure: true,
}
}
pub(super) fn mark_new_failure(&mut self) {
self.num_failures += 1;
self.new_failure = true;
}
pub(super) fn next_retry_time(&self) -> Option<tokio::time::Instant> {
if !self.new_failure {
return None;
}
Some(self.failure_start + Duration::from_secs(self.num_failures * 3))
}
pub(super) fn mark_new_retry(&mut self) {
self.new_failure = false;
}
}