Skip to main content

vitaminc_random/
lib.rs

1#![doc = include_str!("../README.md")]
2use thiserror::Error;
3mod bounded;
4mod generatable;
5mod safe_rand;
6
7pub use bounded::BoundedRng;
8#[doc(inline)]
9pub use generatable::Generatable;
10pub use safe_rand::SafeRand;
11
12// Re-exports
13pub use rand::{Fill, Rng, SeedableRng};
14
15/// Derive macro for `Generatable`
16pub use vitaminc_random_derives::Generatable;
17
18#[derive(Error, Debug)]
19pub enum RandomError {
20    #[error("Generation failed")]
21    GenerationFailed,
22    #[error("Seeding from OS RNG failed: {0}")]
23    SeedingFailed(#[from] rand::rngs::SysError),
24}
25
26#[cfg(test)]
27mod tests {
28    use super::{Generatable, SafeRand};
29    use std::num::NonZeroU16;
30
31    #[test]
32    fn test_generate_nonzerou16() -> Result<(), crate::RandomError> {
33        let mut rng = SafeRand::from_entropy()?;
34        let value: NonZeroU16 = Generatable::random(&mut rng)?;
35        assert_ne!(value.get(), 0);
36        Ok(())
37    }
38}