Trait origin_studio::std::iter::IntoIterator

1.0.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§

source

type Item

The type of the elements being iterated over.

source

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

Which kind of iterator are we turning this into?

Required Methods§

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 CreateFlags

source§

impl IntoIterator for WatchFlags

source§

impl IntoIterator for Access

§

type Item = Access

§

type IntoIter = Iter<Access>

source§

impl IntoIterator for AtFlags

§

type Item = AtFlags

§

type IntoIter = Iter<AtFlags>

source§

impl IntoIterator for FallocateFlags

source§

impl IntoIterator for MemfdFlags

source§

impl IntoIterator for Mode

§

type Item = Mode

§

type IntoIter = Iter<Mode>

source§

impl IntoIterator for OFlags

§

type Item = OFlags

§

type IntoIter = Iter<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 StatxFlags

source§

impl IntoIterator for DupFlags

§

type Item = DupFlags

§

type IntoIter = Iter<DupFlags>

source§

impl IntoIterator for FdFlags

§

type Item = FdFlags

§

type IntoIter = Iter<FdFlags>

source§

impl IntoIterator for ReadWriteFlags

source§

impl IntoIterator for MapFlags

§

type Item = MapFlags

§

type IntoIter = Iter<MapFlags>

source§

impl IntoIterator for MlockFlags

source§

impl IntoIterator for MprotectFlags

source§

impl IntoIterator for MremapFlags

source§

impl IntoIterator for MsyncFlags

source§

impl IntoIterator for ProtFlags

source§

impl IntoIterator for UserfaultfdFlags

source§

impl IntoIterator for MountFlags

source§

impl IntoIterator for MountPropagationFlags

source§

impl IntoIterator for UnmountFlags

source§

impl IntoIterator for FutexFlags

source§

impl IntoIterator for TimerfdFlags

source§

impl IntoIterator for TimerfdTimerFlags

source§

impl IntoIterator for XattrFlags

source§

impl IntoIterator for MembarrierQuery

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 WaitOptions

source§

impl IntoIterator for WaitidOptions

source§

impl IntoIterator for CapabilityFlags

source§

impl IntoIterator for CapabilitiesSecureBits

source§

impl IntoIterator for TaggedAddressMode

source§

impl IntoIterator for ThreadNameSpaceType

source§

impl IntoIterator for UnshareFlags

source§

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>

source§

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.4.0 · source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.4.0 · source§

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

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

source§

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

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

source§

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

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

source§

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

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

1.4.0 · source§

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

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

source§

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

§

type Item = &'a T

§

type IntoIter = Iter<'a, T>

source§

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

§

type Item = &'a mut T

§

type IntoIter = IterMut<'a, T>

const: unstable · source§

impl<I> IntoIterator for Iwhere I: Iterator,

§

type Item = <I as Iterator>::Item

§

type IntoIter = I

source§

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

§

type Item = (K, V)

§

type IntoIter = IntoIter<K, V, A>

source§

impl<T> IntoIterator for Option<T>

§

type Item = T

§

type IntoIter = IntoIter<T>

source§

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

§

type Item = T

§

type IntoIter = IntoIter<T, A>

source§

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

§

type Item = T

§

type IntoIter = IntoIter<T, A>

source§

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

§

type Item = T

§

type IntoIter = IntoIter<T, A>

source§

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

§

type Item = T

§

type IntoIter = IntoIter<T, A>

source§

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

§

type Item = T

§

type IntoIter = IntoIter<T, A>

source§

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

§

type Item = T

§

type IntoIter = IntoIter<T>

1.53.0 · source§

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

§

type Item = T

§

type IntoIter = IntoIter<T, N>