Random Generation Traits

This crate exposes a trait for the random generation process it expects - the GrammarRandomNumberGenerator trait:

#![allow(unused)]
fn main() {
pub trait GrammarRandomNumberGenerator {
    /// This function provides a random number between 0 and len
    fn get_number(&mut self, len: usize) -> usize;
}
}

We provide a few built in implementations for it:

  • usize - we have set it up so usize implements the trait, always returning it's value.
  • FnMut(usize) -> usize - if the length is greater then zero, it will call the closure/FnMut and return it's value

In addition, we provide wrapper components for use with 2 different random number generation crates - rand and bevy_turborand - hidden behind feature flags.

If you wish to use the rand crate, enable the rand feature and wrap any type implementing rand::Rng using either:

  • Rand::new(&mut rng) - this provides a wrapper using the existing reference, and bound to it's lifetime.
  • RandOwned::new(rng) - this provides a wrapper that takes over the existing type, and ownes it from this point forward.

If you wish to use the bevy_turborand crate, enable the turborand feature and wrap any type implementing bevy_turborand::TurboRand using either:

  • TurboRand::new(&mut rng) - this provides a wrapper using the existing reference, and bound to it's lifetime.
  • TurboRandOwned::new(rng) - this provides a wrapper that takes over the existing type, and ownes it from this point forward.