gardal 0.0.1-alpha.1

A WIP performance-focused token-bucket rate limiting and throttling library
Documentation
use std::num::NonZero;

pub struct Tokens(pub(crate) NonZero<u64>);

impl Tokens {
    pub fn new(value: NonZero<u64>) -> Self {
        let f_value = value.get() as f64;
        Self::new_unchecked(f_value)
    }

    pub fn new_checked(value: f64) -> Option<Self> {
        if value == 0.0 {
            None
        } else {
            Some(Self::new_unchecked(value))
        }
    }

    pub(crate) fn new_unchecked(value: f64) -> Self {
        debug_assert!(value >= 0.0);
        Self(unsafe { NonZero::new_unchecked(value.to_bits()) })
    }

    pub fn as_u64(&self) -> u64 {
        f64::from_bits(self.0.get()) as u64
    }
}

impl From<Tokens> for f64 {
    fn from(tokens: Tokens) -> Self {
        tokens.as_u64() as f64
    }
}