only_every 0.1.0

A simple rate-limiter macro: only_every!(Duration::from_millis(200), expensive_expression)
Documentation
use std::sync::Once;

use quanta::Clock;

fn get_clock() -> &'static Clock {
    static mut CLOCK: *const Clock = std::ptr::null();
    static CLOCK_ONCE: Once = Once::new();

    CLOCK_ONCE.call_once(|| {
        let c = Box::new(Clock::new());
        unsafe {
            CLOCK = Box::into_raw(c);
        }
    });

    unsafe { &*CLOCK }
}

struct QuantaTimeSource {
    clock: &'static Clock,
    epoch: quanta::Instant,
}

impl QuantaTimeSource {
    pub(crate) fn new() -> QuantaTimeSource {
        let clock = get_clock();
        let epoch = clock.now();
        QuantaTimeSource { clock, epoch }
    }

    fn now_ms(&self) -> u64 {
        let dur = self.clock.now() - self.epoch;
        let ms = dur.as_millis();
        debug_assert!(ms <= u64::MAX as u128);
        ms as u64
    }
}