Guest User

Untitled

a guest
Mar 23rd, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. pub struct FamilyIterator<'a> {
  2. offset: usize,
  3. family: &'a Family,
  4. }
  5.  
  6. impl<'a> Iterator for FamilyIterator<'a> {
  7. type Item = &'a Person;
  8.  
  9. fn next(&mut self) -> Option<&'a Person> {
  10. let result = match self.offset {
  11. 0 => &self.family.a,
  12. 1 => &self.family.b,
  13. 2 => &self.family.c,
  14. _ => return None,
  15. };
  16. self.offset += 1;
  17. Some(&result)
  18. }
  19. }
  20.  
  21. impl<'a> IntoIterator for &'a Family {
  22. type Item = &'a Person;
  23. type IntoIter = FamilyIterator<'a>;
  24.  
  25. fn into_iter(self) -> Self::IntoIter {
  26. FamilyIterator {
  27. offset: 0,
  28. family: self,
  29. }
  30. }
  31. }
  32.  
  33. #[derive(Debug)]
  34. pub struct Person {
  35. age: usize,
  36. }
  37.  
  38. #[derive(Debug)]
  39. pub struct Family {
  40. a: Person,
  41. b: Person,
  42. c: Person,
  43. }
  44.  
  45. fn main() {
  46. let family = Family {
  47. a: Person { age: 1 },
  48. b: Person { age: 2 },
  49. c: Person { age: 3 },
  50. };
  51. println!("Current family: {:?}", family);
  52. /*
  53. for person in &family {
  54. println!("Person's age: {:?}", person.age);
  55. person.age += 1
  56. }*/
  57. println!("Updated family: {:?}", family);
  58. }
Add Comment
Please, Sign In to add comment