macro_rules! branch_using {
( $rng:expr, { $( $branch:expr ),* $(,)? }) => { ... };
}
Expand description
Branches into one of the given expressions using the given RNG.
This macro dose essentially the same as branch
but uses the given
Rng
.
This macro turns something like this:
let mut my_rng = /* snip */
branch_using!( my_rng, {
println!("First line."),
println!("Second line?"),
println!("Third line!"),
});
into something similar to this:
let mut my_rng = /* snip */
match my_rng.random_range(0..3) {
0 => println!("First line."),
1 => println!("Second line?"),
2 => println!("Third line!"),
_ => unreachable!(),
}
ยงExamples
You can use functions, macros and other arbitrary expressions:
use random_branch::branch_using;
fn do_something() {
println!("There is no such thing")
}
let thing = "fuliluf";
let mut my_rng = /* snip */
branch_using!( my_rng, {
println!("A {} is an animal!", thing),
{
let thing = "lufiful";
println!("Two {}s will never meet.", thing)
},
println!("Only a {} can see other {0}s.", thing),
do_something(),
});
You can also use it as an expression to yield some randomly chosen value:
use random_branch::branch_using;
let mut my_rng = /* snip */
let num = branch_using!( my_rng, {
10,
10 + 11,
2 * (10 + 11),
85,
});
assert!(num == 10 || num == 21 || num == 42 || num == 85);