scru128 3.6.1

SCRU128: Sortable, Clock and Random number-based Unique identifier
Documentation
//! Integration with `rand` (v0.9) crate.

#![cfg(feature = "rand09")]
#![deprecated(since = "3.6.0", note = "use a newer version of `rand` crate")]

use super::{Generator, RandSource, StdSystemTime};
use rand_core09::RngCore;

/// An adapter that implements [`RandSource`] for [`RngCore`] types.
#[derive(Clone, Eq, PartialEq, Debug, Default)]
pub struct Adapter<T>(/** The wrapped [`RngCore`] type. */ pub T);

impl<T: RngCore> RandSource for Adapter<T> {
    fn next_u32(&mut self) -> u32 {
        self.0.next_u32()
    }
}

impl<T: RngCore> Generator<Adapter<T>> {
    /// Creates a generator object with a specified random number generator that implements
    /// [`RngCore`] from `rand` (v0.9) crate. The specified random number generator should be
    /// cryptographically strong and securely seeded.
    ///
    /// # Examples
    ///
    /// ```rust
    /// # #[cfg(feature = "default_rng")]
    /// # {
    /// # use rand09 as rand;
    /// let mut g = scru128::Generator::with_rand09(rand::rng());
    /// println!("{}", g.generate());
    /// # }
    /// ```
    pub const fn with_rand09(rng: T) -> Self {
        Self::with_rand_and_time_sources(Adapter(rng), StdSystemTime)
    }
}