Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. trait MyTrait<T> {
  2. fn iter(&self) -> Iterator<Item = &T>;
  3. }
  4.  
  5. struct MyStructIterator<'a, T> {
  6. items: std::slice::Iter<'a, T>,
  7. }
  8.  
  9. impl<'a, T> MyStructIterator<'a, T> {
  10. fn new(elements: &'a Vec<T>) -> MyStructIterator<'a, T> {
  11. let items = elements.iter();
  12. items.skip(3);
  13. MyStructIterator { items }
  14. }
  15. }
  16.  
  17. impl<'a, T> Iterator for MyStructIterator<'a, T> {
  18. type Item = &'a T;
  19. fn next(&mut self) -> Option<Self::Item> {
  20. self.items.next()
  21. }
  22. }
  23.  
  24. struct MyStruct<T> {
  25. elements: Vec<T>,
  26. }
  27.  
  28. impl<T> MyTrait<T> for MyStruct<T> {
  29. fn iter(&self) -> MyStructIterator<T> {
  30. MyStructIterator::new(&self.elements)
  31. }
  32. }
  33.  
  34. fn main() {
  35. let my_struct = MyStruct {
  36. elements: vec![
  37. "a".to_string(),
  38. "b".to_string(),
  39. "c".to_string(),
  40. "d".to_string(),
  41. "e".to_string(),
  42. ],
  43. };
  44.  
  45. let mut count = 0;
  46. for elem in my_struct.iter() {
  47. count += 1;
  48. }
  49. assert!(count == 2);
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement