use reliakit_timeout::{Deadline, Timeout};
fn main() {
let policy = Timeout::new(1_000);
let deadline: Deadline = policy.start(0);
println!(
"budget: {} ms, expires at t = {}",
policy.budget(),
deadline.expiry()
);
let mut now = 0;
let attempt_cost = 250;
for attempt in 1.. {
match deadline.check(now) {
None => {
println!(
"t = {now}: deadline expired, giving up after {} attempts",
attempt - 1
);
break;
}
Some(remaining) => {
let wait = deadline.clamp(now, attempt_cost);
println!("t = {now}: attempt {attempt} ({remaining} ms left, waiting {wait} ms)");
now += attempt_cost;
}
}
}
}