dicetest/dice/
just.rs

1use crate::prelude::*;
2
3/// Generates the given value.
4///
5/// # Examples
6///
7/// ```
8/// use dicetest::prelude::*;
9/// use dicetest::{Prng, Limit};
10///
11/// let mut prng = Prng::from_seed(0x5EED.into());
12/// let limit = Limit::default();
13/// let mut fate = Fate::new(&mut prng, limit);
14///
15/// assert_eq!(fate.roll(dice::just_once(42)), 42);
16///
17/// #[derive(Debug, PartialEq, Eq)]
18/// struct CannotBeCloned;
19/// assert_eq!(fate.roll(dice::just_once(CannotBeCloned)), CannotBeCloned);
20/// ```
21pub fn just_once<T>(value: T) -> impl DieOnce<T> {
22    dice::from_fn_once(|_| value)
23}
24
25/// Generates a clone of the given value.
26///
27/// ```
28/// use dicetest::prelude::*;
29/// use dicetest::{Prng, Limit};
30///
31/// let mut prng = Prng::from_seed(0x5EED.into());
32/// let limit = Limit::default();
33/// let mut fate = Fate::new(&mut prng, limit);
34///
35/// assert_eq!(fate.roll(dice::just(42)), 42);
36///
37/// let cloning_die = dice::just(vec![0, 1, 2]);
38/// for _ in 0..10 {
39///     assert_eq!(fate.roll(&cloning_die), vec![0, 1, 2]);
40/// }
41/// ```
42pub fn just<T>(value: T) -> impl Die<T>
43where
44    T: Clone,
45{
46    dice::from_fn(move |_| value.clone())
47}