IntoIterator

Trait IntoIterator 

1.6.0 · Source
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 · Source

type Item

The type of the elements being iterated over.

1.0.0 · Source

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

Which kind of iterator are we turning this into?

Required Methods§

1.0.0 · Source

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 &Tree

Source§

impl IntoIterator for IndexVec

Source§

impl IntoIterator for Bytes

Source§

impl IntoIterator for BytesMut

Source§

impl IntoIterator for CacheControl

Source§

impl IntoIterator for ClearSiteData

Source§

impl IntoIterator for IfMatch

Source§

impl IntoIterator for IfNoneMatch

Source§

impl IntoIterator for Vary

Source§

impl IntoIterator for Accept

Source§

impl IntoIterator for AcceptEncoding

Source§

impl IntoIterator for HeaderValues

Source§

impl IntoIterator for Headers

Source§

impl IntoIterator for http_types::request::Request

Source§

impl IntoIterator for http_types::response::Response

Source§

impl IntoIterator for TimingAllowOrigin

Source§

type Item = Url

Source§

type IntoIter = IntoIter

Source§

impl IntoIterator for Allow

Source§

impl IntoIterator for ServerTiming

Source§

impl IntoIterator for TE

Source§

impl IntoIterator for Value

Source§

type Item = Subtag

Source§

type IntoIter = ShortBoxSliceIntoIter<Subtag>

Source§

impl IntoIterator for rustix::backend::event::epoll::CreateFlags

Source§

impl IntoIterator for EventFlags

Source§

impl IntoIterator for PollFlags

Source§

impl IntoIterator for EventfdFlags

Source§

impl IntoIterator for rustix::backend::fs::inotify::CreateFlags

Source§

impl IntoIterator for ReadFlags

Source§

impl IntoIterator for WatchFlags

Source§

impl IntoIterator for Access

Source§

impl IntoIterator for AtFlags

Source§

impl IntoIterator for FallocateFlags

Source§

impl IntoIterator for MemfdFlags

Source§

impl IntoIterator for Mode

Source§

impl IntoIterator for OFlags

Source§

impl IntoIterator for RenameFlags

Source§

impl IntoIterator for ResolveFlags

Source§

impl IntoIterator for SealFlags

Source§

impl IntoIterator for StatVfsMountFlags

Source§

impl IntoIterator for DupFlags

Source§

impl IntoIterator for FdFlags

Source§

impl IntoIterator for ReadWriteFlags

Source§

impl IntoIterator for RecvFlags

Source§

impl IntoIterator for ReturnFlags

Source§

impl IntoIterator for SendFlags

Source§

impl IntoIterator for PipeFlags

Source§

impl IntoIterator for SpliceFlags

Source§

impl IntoIterator for TimerfdFlags

Source§

impl IntoIterator for TimerfdTimerFlags

Source§

impl IntoIterator for IFlags

Source§

impl IntoIterator for StatxAttributes

Source§

impl IntoIterator for StatxFlags

Source§

impl IntoIterator for XattrFlags

Source§

impl IntoIterator for SocketFlags

Source§

impl IntoIterator for TxTimeFlags

Source§

impl IntoIterator for SocketAddrXdpFlags

Source§

impl IntoIterator for XdpDescOptions

Source§

impl IntoIterator for XdpOptionsFlags

Source§

impl IntoIterator for XdpRingFlags

Source§

impl IntoIterator for XdpUmemRegFlags

Source§

impl IntoIterator for PidfdFlags

Source§

impl IntoIterator for PidfdGetfdFlags

Source§

impl IntoIterator for FloatingPointEmulationControl

Source§

impl IntoIterator for FloatingPointExceptionMode

Source§

impl IntoIterator for SpeculationFeatureControl

Source§

impl IntoIterator for SpeculationFeatureState

Source§

impl IntoIterator for UnalignedAccessControl

Source§

impl IntoIterator for WaitIdOptions

Source§

impl IntoIterator for WaitOptions

Source§

impl IntoIterator for Map<String, Value>

Source§

impl IntoIterator for tide::response::Response

1.10.0 · Source§

impl<'a> IntoIterator for &'a UnixListener

1.6.0 · Source§

impl<'a> IntoIterator for &'a std::path::Path

1.6.0 · Source§

impl<'a> IntoIterator for &'a std::path::PathBuf

Source§

impl<'a> IntoIterator for &'a anstyle_parse::params::Params

Source§

impl<'a> IntoIterator for &'a async_std::path::path::Path

Source§

impl<'a> IntoIterator for &'a async_std::path::pathbuf::PathBuf

Source§

impl<'a> IntoIterator for &'a Bytes

Source§

type Item = &'a u8

Source§

type IntoIter = Iter<'a, u8>

Source§

impl<'a> IntoIterator for &'a BytesMut

Source§

type Item = &'a u8

Source§

type IntoIter = Iter<'a, u8>

Source§

impl<'a> IntoIterator for &'a CacheControl

Source§

type Item = &'a CacheDirective

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a ClearSiteData

Source§

type Item = &'a ClearDirective

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a IfMatch

Source§

type Item = &'a ETag

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a IfNoneMatch

Source§

type Item = &'a ETag

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a Vary

Source§

type Item = &'a HeaderName

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a Accept

Source§

impl<'a> IntoIterator for &'a AcceptEncoding

Source§

impl<'a> IntoIterator for &'a HeaderValues

Source§

impl<'a> IntoIterator for &'a Headers

Source§

impl<'a> IntoIterator for &'a http_types::request::Request

Source§

impl<'a> IntoIterator for &'a http_types::response::Response

Source§

impl<'a> IntoIterator for &'a TimingAllowOrigin

Source§

type Item = &'a Url

Source§

type IntoIter = Iter<'a>

Source§

impl<'a> IntoIterator for &'a Allow

Source§

impl<'a> IntoIterator for &'a ServerTiming

Source§

impl<'a> IntoIterator for &'a TE

Source§

impl<'a> IntoIterator for &'a Events

Source§

impl<'a> IntoIterator for &'a route_recognizer::Params

Source§

type IntoIter = Iter<'a>

Source§

type Item = (&'a str, &'a str)

Source§

impl<'a> IntoIterator for &'a EventVec

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 tide::response::Response

Source§

impl<'a> IntoIterator for &'a mut CacheControl

Source§

type Item = &'a mut CacheDirective

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut ClearSiteData

Source§

type Item = &'a mut ClearDirective

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut IfMatch

Source§

type Item = &'a mut ETag

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut IfNoneMatch

Source§

type Item = &'a mut ETag

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut Vary

Source§

type Item = &'a mut HeaderName

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut Accept

Source§

impl<'a> IntoIterator for &'a mut AcceptEncoding

Source§

impl<'a> IntoIterator for &'a mut Headers

Source§

impl<'a> IntoIterator for &'a mut http_types::request::Request

Source§

impl<'a> IntoIterator for &'a mut http_types::response::Response

Source§

impl<'a> IntoIterator for &'a mut TimingAllowOrigin

Source§

type Item = &'a mut Url

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut ServerTiming

Source§

type Item = &'a mut Metric

Source§

type IntoIter = IterMut<'a>

Source§

impl<'a> IntoIterator for &'a mut TE

Source§

type Item = &'a mut EncodingProposal

Source§

type IntoIter = IterMut<'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> IntoIterator for &'a mut tide::response::Response

Source§

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

Source§

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

Source§

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

Source§

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

Iterate the ArrayVec with references to each element.

use arrayvec::ArrayVec;

let array = ArrayVec::from([1, 2, 3]);

for elt in &array {
    // ...
}
Source§

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

Source§

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

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 tinyvec::arrayvec::ArrayVec<A>
where A: Array,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Iterate the ArrayVec with mutable references to each element.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

for elt in &mut array {
    // ...
}
Source§

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

Source§

type IntoIter = IterMut<'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

Source§

impl<'a, A> IntoIterator for &'a mut tinyvec::arrayvec::ArrayVec<A>
where A: Array,

Source§

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

Source§

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

Source§

impl<'a, Fut> IntoIterator for &'a FuturesUnordered<Fut>
where Fut: Unpin,

Source§

impl<'a, Fut> IntoIterator for &'a mut FuturesUnordered<Fut>
where Fut: Unpin,

1.80.0 · Source§

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

1.80.0 · Source§

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

1.0.0 · Source§

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

Source§

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

Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

Source§

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

Source§

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 · Source§

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

Source§

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

Source§

impl<'a, St> IntoIterator for &'a SelectAll<St>
where St: Stream + Unpin,

Source§

impl<'a, St> IntoIterator for &'a mut SelectAll<St>
where St: Stream + Unpin,

Source§

impl<'a, State> IntoIterator for &'a tide::request::Request<State>

Source§

impl<'a, State> IntoIterator for &'a mut tide::request::Request<State>

1.4.0 · Source§

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

1.0.0 · Source§

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

Source§

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

Source§

type Item = T

Source§

type IntoIter = Iter<'a, T>

1.1.0 · Source§

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

Source§

type Item = T

Source§

type IntoIter = Iter<'a, T>

Source§

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

1.4.0 · Source§

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

1.0.0 · Source§

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

Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.4.0 · Source§

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

1.4.0 · Source§

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

Source§

impl<'a, T, N> IntoIterator for &'a GenericArray<T, N>
where T: 'a, N: ArrayLength<T>,

Source§

impl<'a, T, N> IntoIterator for &'a mut GenericArray<T, N>
where T: 'a, N: ArrayLength<T>,

1.0.0 · Source§

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

Source§

impl<'a, T, const CAP: usize> IntoIterator for &'a arrayvec::arrayvec::ArrayVec<T, CAP>
where T: 'a,

Iterate the ArrayVec with references to each element.

use arrayvec::ArrayVec;

let array = ArrayVec::from([1, 2, 3]);

for elt in &array {
    // ...
}
Source§

impl<'a, T, const CAP: usize> IntoIterator for &'a mut arrayvec::arrayvec::ArrayVec<T, CAP>
where T: 'a,

Iterate the ArrayVec with mutable references to each element.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

for elt in &mut array {
    // ...
}
1.0.0 · Source§

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

1.0.0 · Source§

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

Source§

impl<'s, T> IntoIterator for SliceVec<'s, T>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<A> IntoIterator for arrayvec::ArrayVec<A>
where A: Array,

Iterate the ArrayVec with each element by value.

The vector is consumed by this operation.

use arrayvec::ArrayVec;

for elt in ArrayVec::from([1, 2, 3]) {
    // ...
}
Source§

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

Source§

impl<A> IntoIterator for tinyvec::arrayvec::ArrayVec<A>
where A: Array,

Source§

impl<Fut> IntoIterator for FuturesUnordered<Fut>
where Fut: Unpin,

Source§

type Item = Fut

Source§

type IntoIter = IntoIter<Fut>

1.0.0 · Source§

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

1.80.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

Source§

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

Source§

impl<St> IntoIterator for SelectAll<St>
where St: Stream + Unpin,

Source§

impl<State> IntoIterator for tide::request::Request<State>

1.0.0 · Source§

impl<T> IntoIterator for Option<T>

Source§

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

1.1.0 · Source§

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

Source§

impl<T> IntoIterator for Slab<T>

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

Source§

impl<T, N> IntoIterator for GenericArray<T, N>
where N: ArrayLength<T>,

1.0.0 · Source§

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

Source§

impl<T, U> IntoIterator for Chain<T, U>
where T: Buf, U: Buf,

Source§

impl<T, const CAP: usize> IntoIterator for arrayvec::arrayvec::ArrayVec<T, CAP>

Iterate the ArrayVec with each element by value.

The vector is consumed by this operation.

use arrayvec::ArrayVec;

for elt in ArrayVec::from([1, 2, 3]) {
    // ...
}
Source§

type Item = T

Source§

type IntoIter = IntoIter<T, CAP>

1.53.0 · Source§

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

Source§

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