Advertisement
Guest User

Untitled

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