Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![allow(unused)]
- pub mod alphabet_iter {
- use std::convert::TryFrom;
- pub fn alphabet(start: char, end: char) -> Option<impl Iterator<Item=char>> {
- // Check if there are invalid code points in the range.
- if start <= '\u{D7FF}' && end >= '\u{E000}' {
- None
- } else {
- Some(_impl_alphabet_iter(start as u32, end as u32))
- }
- }
- fn _impl_alphabet_iter(start: u32, end: u32) -> impl Iterator<Item=char> {
- let mut cursor = start;
- std::iter::from_fn(move || {
- if cursor > end {
- None
- } else {
- cursor += 1;
- // Unwrap is ok here as we've already checked it's a char
- Some( char::try_from(cursor - 1).unwrap() )
- }
- })
- }
- }
- use alphabet_iter::alphabet;
- fn main() {
- if let Some(mut iter) = alphabet('a', 'z') {
- for letter in iter {
- println!("{}", letter);
- }
- } else {
- println!("Not a valid range!");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement