Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. #![allow(unused)]
  2.  
  3. pub mod alphabet_iter {
  4. use std::convert::TryFrom;
  5. pub fn alphabet(start: char, end: char) -> Option<impl Iterator<Item=char>> {
  6. // Check if there are invalid code points in the range.
  7. if start <= '\u{D7FF}' && end >= '\u{E000}' {
  8. None
  9. } else {
  10. Some(_impl_alphabet_iter(start as u32, end as u32))
  11. }
  12. }
  13. fn _impl_alphabet_iter(start: u32, end: u32) -> impl Iterator<Item=char> {
  14. let mut cursor = start;
  15. std::iter::from_fn(move || {
  16. if cursor > end {
  17. None
  18. } else {
  19. cursor += 1;
  20. // Unwrap is ok here as we've already checked it's a char
  21. Some( char::try_from(cursor - 1).unwrap() )
  22. }
  23. })
  24. }
  25. }
  26.  
  27. use alphabet_iter::alphabet;
  28. fn main() {
  29. if let Some(mut iter) = alphabet('a', 'z') {
  30. for letter in iter {
  31. println!("{}", letter);
  32. }
  33. } else {
  34. println!("Not a valid range!");
  35. }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement