How to use adapters/closures for IntoIterator implementation?

As a matter of fact, in your situation I would just write a function

fn evens<I>(iterable: I) -> impl Iterator<Item = u32>
where
    I: IntoIterator<Item = u32>,
{
    iterable.into_iter().filter(|&x| x % 2 == 0)
}

and use it like

fn main() {
    for x in evens(vec![1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) {
        println!("{:?}", x);
    }
}

My other question was about how to make it a method in order to use it like this

fn main() {
    for x in vec![1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().evens() {
        println!("{:?}", x);
    }
}

and enable further chaining. I still don't have a nice solution to that (one that relies on iterator adaptors and does not involve implementing next()). The reason is that AFAIK we can use impl Trait in the return type of functions, but not in associated types (yet).