IntoIterator

Trait IntoIterator 

1.0.0
pub trait IntoIterator {
    type Item;
    type IntoIter: Iterator<Item = Self::Item>;

    // Required method
    fn into_iter(self) -> Self::IntoIter;
}
Expand description

Conversion into an Iterator.

By implementing IntoIterator for a type, you define how it will be converted to an iterator. This is common for types which describe a collection of some kind.

One benefit of implementing IntoIterator is that your type will work with Rust’s for loop syntax.

See also: FromIterator.

§Examples

Basic usage:

let v = [1, 2, 3];
let mut iter = v.into_iter();

assert_eq!(Some(1), iter.next());
assert_eq!(Some(2), iter.next());
assert_eq!(Some(3), iter.next());
assert_eq!(None, iter.next());

Implementing IntoIterator for your type:

// A sample collection, that's just a wrapper over Vec<T>
#[derive(Debug)]
struct MyCollection(Vec<i32>);

// Let's give it some methods so we can create one and add things
// to it.
impl MyCollection {
    fn new() -> MyCollection {
        MyCollection(Vec::new())
    }

    fn add(&mut self, elem: i32) {
        self.0.push(elem);
    }
}

// and we'll implement IntoIterator
impl IntoIterator for MyCollection {
    type Item = i32;
    type IntoIter = std::vec::IntoIter<Self::Item>;

    fn into_iter(self) -> Self::IntoIter {
        self.0.into_iter()
    }
}

// Now we can make a new collection...
let mut c = MyCollection::new();

// ... add some stuff to it ...
c.add(0);
c.add(1);
c.add(2);

// ... and then turn it into an Iterator:
for (i, n) in c.into_iter().enumerate() {
    assert_eq!(i as i32, n);
}

It is common to use IntoIterator as a trait bound. This allows the input collection type to change, so long as it is still an iterator. Additional bounds can be specified by restricting on Item:

fn collect_as_strings<T>(collection: T) -> Vec<String>
where
    T: IntoIterator,
    T::Item: std::fmt::Debug,
{
    collection
        .into_iter()
        .map(|item| format!("{item:?}"))
        .collect()
}

Required Associated Types§

1.0.0

type Item

The type of the elements being iterated over.

1.0.0

type IntoIter: Iterator<Item = Self::Item>

Which kind of iterator are we turning this into?

Required Methods§

1.0.0

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value.

See the module-level documentation for more.

§Examples
let v = [1, 2, 3];
let mut iter = v.into_iter();

assert_eq!(Some(1), iter.next());
assert_eq!(Some(2), iter.next());
assert_eq!(Some(3), iter.next());
assert_eq!(None, iter.next());

Implementors§

Source§

impl IntoIterator for AttrCheckFlags

Source§

impl IntoIterator for CheckoutNotificationType

Source§

impl IntoIterator for CredentialType

Source§

impl IntoIterator for DiffFlags

Source§

impl IntoIterator for DiffStatsFormat

Source§

impl IntoIterator for IndexAddOption

Source§

impl IntoIterator for IndexEntryExtendedFlag

Source§

impl IntoIterator for IndexEntryFlag

Source§

impl IntoIterator for MergeAnalysis

Source§

impl IntoIterator for MergePreference

Source§

impl IntoIterator for OdbLookupFlags

Source§

impl IntoIterator for PathspecFlags

Source§

impl IntoIterator for ReferenceFormat

Source§

impl IntoIterator for RemoteUpdateFlags

Source§

impl IntoIterator for RepositoryInitMode

Source§

impl IntoIterator for RepositoryOpenFlags

Source§

impl IntoIterator for RevparseMode

Source§

impl IntoIterator for Sort

Source§

impl IntoIterator for StashApplyFlags

Source§

impl IntoIterator for StashFlags

Source§

impl IntoIterator for Status

Source§

impl IntoIterator for SubmoduleStatus

Source§

impl IntoIterator for Value

Source§

type Item = Subtag

Source§

type IntoIter = ShortBoxSliceIntoIter<Subtag>

Source§

impl IntoIterator for Map<String, Value>

1.10.0§

impl<'a> IntoIterator for &'a UnixListener

1.6.0§

impl<'a> IntoIterator for &'a Path

§

type Item = &'a OsStr

§

type IntoIter = Iter<'a>

1.6.0§

impl<'a> IntoIterator for &'a PathBuf

§

type Item = &'a OsStr

§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a Utf8Path

Source§

type Item = &'a str

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a Utf8PathBuf

Source§

type Item = &'a str

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a Statuses<'a>

Source§

impl<'a> IntoIterator for &'a StringArray

Source§

impl<'a> IntoIterator for &'a Map<String, Value>

Source§

type Item = (&'a String, &'a Value)

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a mut Map<String, Value>

Source§

type Item = (&'a String, &'a mut Value)

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a, A> IntoIterator for &'a SmallVec<A>
where A: Array,

Source§

type IntoIter = Iter<'a, <A as Array>::Item>

Source§

type Item = &'a <A as Array>::Item

Source§

impl<'a, A> IntoIterator for &'a mut SmallVec<A>
where A: Array,

Source§

type IntoIter = IterMut<'a, <A as Array>::Item>

Source§

type Item = &'a mut <A as Array>::Item

1.80.0§

impl<'a, I, A> IntoIterator for &'a Box<[I], A>
where A: Allocator,

§

type IntoIter = Iter<'a, I>

§

type Item = &'a I

1.80.0§

impl<'a, I, A> IntoIterator for &'a mut Box<[I], A>
where A: Allocator,

§

type IntoIter = IterMut<'a, I>

§

type Item = &'a mut I

1.0.0§

impl<'a, K, V, A> IntoIterator for &'a BTreeMap<K, V, A>
where A: Allocator + Clone,

§

type Item = (&'a K, &'a V)

§

type IntoIter = Iter<'a, K, V>

1.0.0§

impl<'a, K, V, A> IntoIterator for &'a mut BTreeMap<K, V, A>
where A: Allocator + Clone,

§

type Item = (&'a K, &'a mut V)

§

type IntoIter = IterMut<'a, K, V>

1.0.0§

impl<'a, K, V, S> IntoIterator for &'a HashMap<K, V, S>

§

type Item = (&'a K, &'a V)

§

type IntoIter = Iter<'a, K, V>

Source§

impl<'a, K, V, S> IntoIterator for &'a LiteMap<K, V, S>
where S: StoreIterable<'a, K, V>,

1.0.0§

impl<'a, K, V, S> IntoIterator for &'a mut HashMap<K, V, S>

§

type Item = (&'a K, &'a mut V)

§

type IntoIter = IterMut<'a, K, V>

Source§

impl<'a, K, V, S> IntoIterator for &'a mut LiteMap<K, V, S>
where S: StoreIterableMut<'a, K, V>,

1.4.0§

impl<'a, T> IntoIterator for &'a Option<T>

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T> IntoIterator for &'a [T]

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

§

impl<'a, T> IntoIterator for &'a std::sync::mpmc::Receiver<T>

§

type Item = T

§

type IntoIter = Iter<'a, T>

1.1.0§

impl<'a, T> IntoIterator for &'a std::sync::mpsc::Receiver<T>

§

type Item = T

§

type IntoIter = Iter<'a, T>

1.4.0§

impl<'a, T> IntoIterator for &'a mut Option<T>

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

1.0.0§

impl<'a, T> IntoIterator for &'a mut [T]

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a BinaryHeap<T, A>
where A: Allocator,

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a BTreeSet<T, A>
where A: Allocator + Clone,

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a LinkedList<T, A>
where A: Allocator,

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a VecDeque<T, A>
where A: Allocator,

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a Vec<T, A>
where A: Allocator,

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a mut LinkedList<T, A>
where A: Allocator,

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a mut VecDeque<T, A>
where A: Allocator,

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

1.0.0§

impl<'a, T, A> IntoIterator for &'a mut Vec<T, A>
where A: Allocator,

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

1.4.0§

impl<'a, T, E> IntoIterator for &'a Result<T, E>

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.4.0§

impl<'a, T, E> IntoIterator for &'a mut Result<T, E>

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

1.0.0§

impl<'a, T, S> IntoIterator for &'a HashSet<T, S>

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, const N: usize> IntoIterator for &'a [T; N]

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.0.0§

impl<'a, T, const N: usize> IntoIterator for &'a mut [T; N]

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

Source§

impl<'repo, 'iter> IntoIterator for &'iter Tree<'repo>

Source§

type Item = TreeEntry<'iter>

Source§

type IntoIter = TreeIter<'iter>

§

impl<A> IntoIterator for Range<A>
where A: Step,

§

type Item = A

§

type IntoIter = RangeIter<A>

§

impl<A> IntoIterator for RangeFrom<A>
where A: Step,

§

type Item = A

§

type IntoIter = RangeFromIter<A>

§

impl<A> IntoIterator for RangeInclusive<A>
where A: Step,

Source§

impl<A> IntoIterator for SmallVec<A>
where A: Array,

1.0.0§

impl<I> IntoIterator for I
where I: Iterator,

§

type Item = <I as Iterator>::Item

§

type IntoIter = I

1.80.0§

impl<I, A> IntoIterator for Box<[I], A>
where A: Allocator,

§

type IntoIter = IntoIter<I, A>

§

type Item = I

1.0.0§

impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
where A: Allocator + Clone,

§

type Item = (K, V)

§

type IntoIter = IntoIter<K, V, A>

1.0.0§

impl<K, V, S> IntoIterator for HashMap<K, V, S>

§

type Item = (K, V)

§

type IntoIter = IntoIter<K, V>

Source§

impl<K, V, S> IntoIterator for LiteMap<K, V, S>
where S: StoreIntoIterator<K, V>,

1.0.0§

impl<T> IntoIterator for Option<T>

§

type Item = T

§

type IntoIter = IntoIter<T>

§

impl<T> IntoIterator for std::sync::mpmc::Receiver<T>

§

type Item = T

§

type IntoIter = IntoIter<T>

1.1.0§

impl<T> IntoIterator for std::sync::mpsc::Receiver<T>

§

type Item = T

§

type IntoIter = IntoIter<T>

1.0.0§

impl<T, A> IntoIterator for BinaryHeap<T, A>
where A: Allocator,

§

type Item = T

§

type IntoIter = IntoIter<T, A>

1.0.0§

impl<T, A> IntoIterator for BTreeSet<T, A>
where A: Allocator + Clone,

§

type Item = T

§

type IntoIter = IntoIter<T, A>

1.0.0§

impl<T, A> IntoIterator for LinkedList<T, A>
where A: Allocator,

§

type Item = T

§

type IntoIter = IntoIter<T, A>

1.0.0§

impl<T, A> IntoIterator for VecDeque<T, A>
where A: Allocator,

§

type Item = T

§

type IntoIter = IntoIter<T, A>

1.0.0§

impl<T, A> IntoIterator for Vec<T, A>
where A: Allocator,

§

type Item = T

§

type IntoIter = IntoIter<T, A>

1.0.0§

impl<T, E> IntoIterator for Result<T, E>

§

type Item = T

§

type IntoIter = IntoIter<T>

1.0.0§

impl<T, S> IntoIterator for HashSet<T, S>

§

type Item = T

§

type IntoIter = IntoIter<T>

1.53.0§

impl<T, const N: usize> IntoIterator for [T; N]

§

type Item = T

§

type IntoIter = IntoIter<T, N>

Source§

impl<T, const N: usize> IntoIterator for NichedOption<T, N>