I'm trying to use generics for iterators in traits and am having a hard time understanding why it does not compile.
struct B {
values: Vec<(i64, i64)>,
}
pub trait IterableCustom {
fn get_iterator<'a, I>(&self) -> I
where
I: Iterator<Item = &'a (i64, i64)>;
}
impl IterableCustom for B {
fn get_iterator<'a, I>(&self) -> I
where
I: Iterator<Item = &'a (i64, i64)>,
{
let rev = self.values.iter().rev();
rev
}
}
It throws an error:
error[E0308]: mismatched types
--> src/lib.rs:17:9
|
12 | fn get_iterator<'a, I>(&self) -> I
| - - expected `I` because of return type
| |
| this type parameter
...
17 | rev
| ^^^ expected type parameter `I`, found struct `Rev`
|
= note: expected type parameter `I`
found struct `Rev<std::slice::Iter<'_, (i64, i64)>>`
For more information about this error, try `rustc --explain E0308`.