mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-12 05:27:07 +00:00
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use rand::prelude::*;
|
||
|
||
pub struct RandomCharIter<T: Rng>(T);
|
||
|
||
impl<T: Rng> RandomCharIter<T> {
|
||
pub fn new(rng: T) -> Self {
|
||
Self(rng)
|
||
}
|
||
}
|
||
|
||
impl<T: Rng> Iterator for RandomCharIter<T> {
|
||
type Item = char;
|
||
|
||
fn next(&mut self) -> Option<Self::Item> {
|
||
if std::env::var("SIMPLE_TEXT").map_or(false, |v| !v.is_empty()) {
|
||
return if self.0.gen_range(0..100) < 5 {
|
||
Some('\n')
|
||
} else {
|
||
Some(self.0.gen_range(b'a'..b'z' + 1).into())
|
||
};
|
||
}
|
||
|
||
match self.0.gen_range(0..100) {
|
||
// whitespace
|
||
0..=19 => [' ', '\n', '\t'].choose(&mut self.0).copied(),
|
||
// two-byte greek letters
|
||
20..=32 => char::from_u32(self.0.gen_range(('α' as u32)..('ω' as u32 + 1))),
|
||
// // three-byte characters
|
||
33..=45 => ['✋', '✅', '❌', '❎', '⭐'].choose(&mut self.0).copied(),
|
||
// // four-byte characters
|
||
46..=58 => ['🍐', '🏀', '🍗', '🎉'].choose(&mut self.0).copied(),
|
||
// ascii letters
|
||
_ => Some(self.0.gen_range(b'a'..b'z' + 1).into()),
|
||
}
|
||
}
|
||
}
|