rl-core 1.18.0

Core logic for a token-bucket rate-limiter.
Documentation
macro_rules! test {
	($name:ident($now:pat_param) $body:block) => {
		#[test]
		fn $name() {
			fn f<
				T: crate::TimeNow<Duration=std::time::Duration>
					+ Copy
					+ std::ops::Add<std::time::Duration, Output=T>
					+ std::ops::AddAssign<std::time::Duration>
			>($now: T)
				$body

			f(std::time::UNIX_EPOCH);
			f(std::time::Instant::now());

			#[cfg(feature="tokio")] f(tokio::time::Instant::now());
		}
	};
}

test!(test_time_now(now) {
	let cfg = crate::Config::new(std::time::Duration::from_secs(1), 10);

	let mut t = crate::Tracker::full();

	assert_eq!(t.capacity_at(&cfg, now), 10);
	assert_eq!(t.capacity(&cfg), 10);
	assert_eq!(t.acquire(&cfg, 1), Ok(()));
});