use crate::dice::{CollectionBuilder, LengthRange};
use crate::prelude::*;
pub struct StringBuilder;
impl StringBuilder {
fn die() -> impl Die<Self> {
dice::from_fn(|_fate| Self)
}
}
impl CollectionBuilder<char, String> for StringBuilder {
fn build(self, elems: impl ExactSizeIterator<Item = char>) -> String {
let mut string = String::with_capacity(elems.len());
string.extend(elems);
string
}
}
pub fn string(char_die: impl Die<char>, length_range: impl LengthRange) -> impl Die<String> {
dice::collection(StringBuilder::die(), char_die, length_range)
}