# Enum itertools::Either

``````pub enum Either<L, R> {
Left(L),
Right(R),
}``````
Expand description

The enum `Either` with variants `Left` and `Right` is a general purpose sum type with two cases.

The `Either` type is symmetric and treats its variants the same way, without preference. (For representing success or error, use the regular `Result` enum instead.)

## Variants§

§

### Left(L)

A value of type `L`.

§

### Right(R)

A value of type `R`.

## Implementations§

source§

### impl<L, R> Either<L, R>

source

#### pub fn is_left(&self) -> bool

Return true if the value is the `Left` variant.

``````use either::*;

let values = [Left(1), Right("the right value")];
assert_eq!(values[0].is_left(), true);
assert_eq!(values[1].is_left(), false);``````
source

#### pub fn is_right(&self) -> bool

Return true if the value is the `Right` variant.

``````use either::*;

let values = [Left(1), Right("the right value")];
assert_eq!(values[0].is_right(), false);
assert_eq!(values[1].is_right(), true);``````
source

#### pub fn left(self) -> Option<L>

Convert the left side of `Either<L, R>` to an `Option<L>`.

``````use either::*;

let left: Either<_, ()> = Left("some value");
assert_eq!(left.left(),  Some("some value"));

let right: Either<(), _> = Right(321);
assert_eq!(right.left(), None);``````
source

#### pub fn right(self) -> Option<R>

Convert the right side of `Either<L, R>` to an `Option<R>`.

``````use either::*;

let left: Either<_, ()> = Left("some value");
assert_eq!(left.right(),  None);

let right: Either<(), _> = Right(321);
assert_eq!(right.right(), Some(321));``````
source

#### pub fn as_ref(&self) -> Either<&L, &R> ⓘ

Convert `&Either<L, R>` to `Either<&L, &R>`.

``````use either::*;

let left: Either<_, ()> = Left("some value");
assert_eq!(left.as_ref(), Left(&"some value"));

let right: Either<(), _> = Right("some value");
assert_eq!(right.as_ref(), Right(&"some value"));``````
source

#### pub fn as_mut(&mut self) -> Either<&mut L, &mut R> ⓘ

Convert `&mut Either<L, R>` to `Either<&mut L, &mut R>`.

``````use either::*;

fn mutate_left(value: &mut Either<u32, u32>) {
if let Some(l) = value.as_mut().left() {
*l = 999;
}
}

let mut left = Left(123);
let mut right = Right(123);
mutate_left(&mut left);
mutate_left(&mut right);
assert_eq!(left, Left(999));
assert_eq!(right, Right(123));``````
source

#### pub fn as_pin_ref(self: Pin<&Either<L, R>>) -> Either<Pin<&L>, Pin<&R>> ⓘ

Convert `Pin<&Either<L, R>>` to `Either<Pin<&L>, Pin<&R>>`, pinned projections of the inner variants.

source

#### pub fn as_pin_mut( self: Pin<&mut Either<L, R>> ) -> Either<Pin<&mut L>, Pin<&mut R>> ⓘ

Convert `Pin<&mut Either<L, R>>` to `Either<Pin<&mut L>, Pin<&mut R>>`, pinned projections of the inner variants.

source

#### pub fn flip(self) -> Either<R, L> ⓘ

Convert `Either<L, R>` to `Either<R, L>`.

``````use either::*;

let left: Either<_, ()> = Left(123);
assert_eq!(left.flip(), Right(123));

let right: Either<(), _> = Right("some value");
assert_eq!(right.flip(), Left("some value"));``````
source

#### pub fn map_left<F, M>(self, f: F) -> Either<M, R> ⓘwhere F: FnOnce(L) -> M,

Apply the function `f` on the value in the `Left` variant if it is present rewrapping the result in `Left`.

``````use either::*;

let left: Either<_, u32> = Left(123);
assert_eq!(left.map_left(|x| x * 2), Left(246));

let right: Either<u32, _> = Right(123);
assert_eq!(right.map_left(|x| x * 2), Right(123));``````
source

#### pub fn map_right<F, S>(self, f: F) -> Either<L, S> ⓘwhere F: FnOnce(R) -> S,

Apply the function `f` on the value in the `Right` variant if it is present rewrapping the result in `Right`.

``````use either::*;

let left: Either<_, u32> = Left(123);
assert_eq!(left.map_right(|x| x * 2), Left(123));

let right: Either<u32, _> = Right(123);
assert_eq!(right.map_right(|x| x * 2), Right(246));``````
source

#### pub fn either<F, G, T>(self, f: F, g: G) -> Twhere F: FnOnce(L) -> T, G: FnOnce(R) -> T,

Apply one of two functions depending on contents, unifying their result. If the value is `Left(L)` then the first function `f` is applied; if it is `Right(R)` then the second function `g` is applied.

``````use either::*;

fn square(n: u32) -> i32 { (n * n) as i32 }
fn negate(n: i32) -> i32 { -n }

let left: Either<u32, i32> = Left(4);
assert_eq!(left.either(square, negate), 16);

let right: Either<u32, i32> = Right(-4);
assert_eq!(right.either(square, negate), 4);``````
source

#### pub fn either_with<Ctx, F, G, T>(self, ctx: Ctx, f: F, g: G) -> Twhere F: FnOnce(Ctx, L) -> T, G: FnOnce(Ctx, R) -> T,

Like `either`, but provide some context to whichever of the functions ends up being called.

``````// In this example, the context is a mutable reference
use either::*;

let mut result = Vec::new();

let values = vec![Left(2), Right(2.7)];

for value in values {
value.either_with(&mut result,
|ctx, integer| ctx.push(integer),
|ctx, real| ctx.push(f64::round(real) as i32));
}

assert_eq!(result, vec![2, 3]);``````
source

#### pub fn left_and_then<F, S>(self, f: F) -> Either<S, R> ⓘwhere F: FnOnce(L) -> Either<S, R>,

Apply the function `f` on the value in the `Left` variant if it is present.

``````use either::*;

let left: Either<_, u32> = Left(123);
assert_eq!(left.left_and_then::<_,()>(|x| Right(x * 2)), Right(246));

let right: Either<u32, _> = Right(123);
assert_eq!(right.left_and_then(|x| Right::<(), _>(x * 2)), Right(123));``````
source

#### pub fn right_and_then<F, S>(self, f: F) -> Either<L, S> ⓘwhere F: FnOnce(R) -> Either<L, S>,

Apply the function `f` on the value in the `Right` variant if it is present.

``````use either::*;

let left: Either<_, u32> = Left(123);
assert_eq!(left.right_and_then(|x| Right(x * 2)), Left(123));

let right: Either<u32, _> = Right(123);
assert_eq!(right.right_and_then(|x| Right(x * 2)), Right(246));``````
source

#### pub fn into_iter( self ) -> Either<<L as IntoIterator>::IntoIter, <R as IntoIterator>::IntoIter> ⓘwhere L: IntoIterator, R: IntoIterator<Item = <L as IntoIterator>::Item>,

Convert the inner value to an iterator.

``````use either::*;

let left: Either<_, Vec<u32>> = Left(vec![1, 2, 3, 4, 5]);
let mut right: Either<Vec<u32>, _> = Right(vec![]);
right.extend(left.into_iter());
assert_eq!(right, Right(vec![1, 2, 3, 4, 5]));``````
source

#### pub fn left_or(self, other: L) -> L

Return left value or given value

Arguments passed to `left_or` are eagerly evaluated; if you are passing the result of a function call, it is recommended to use `left_or_else`, which is lazily evaluated.

##### Examples
``````let left: Either<&str, &str> = Left("left");
assert_eq!(left.left_or("foo"), "left");

let right: Either<&str, &str> = Right("right");
assert_eq!(right.left_or("left"), "left");``````
source

#### pub fn left_or_default(self) -> Lwhere L: Default,

Return left or a default

##### Examples
``````let left: Either<String, u32> = Left("left".to_string());
assert_eq!(left.left_or_default(), "left");

let right: Either<String, u32> = Right(42);
assert_eq!(right.left_or_default(), String::default());``````
source

#### pub fn left_or_else<F>(self, f: F) -> Lwhere F: FnOnce(R) -> L,

Returns left value or computes it from a closure

##### Examples
``````let left: Either<String, u32> = Left("3".to_string());
assert_eq!(left.left_or_else(|_| unreachable!()), "3");

let right: Either<String, u32> = Right(3);
assert_eq!(right.left_or_else(|x| x.to_string()), "3");``````
source

#### pub fn right_or(self, other: R) -> R

Return right value or given value

Arguments passed to `right_or` are eagerly evaluated; if you are passing the result of a function call, it is recommended to use `right_or_else`, which is lazily evaluated.

##### Examples
``````let right: Either<&str, &str> = Right("right");
assert_eq!(right.right_or("foo"), "right");

let left: Either<&str, &str> = Left("left");
assert_eq!(left.right_or("right"), "right");``````
source

#### pub fn right_or_default(self) -> Rwhere R: Default,

Return right or a default

##### Examples
``````let left: Either<String, u32> = Left("left".to_string());
assert_eq!(left.right_or_default(), u32::default());

let right: Either<String, u32> = Right(42);
assert_eq!(right.right_or_default(), 42);``````
source

#### pub fn right_or_else<F>(self, f: F) -> Rwhere F: FnOnce(L) -> R,

Returns right value or computes it from a closure

##### Examples
``````let left: Either<String, u32> = Left("3".to_string());
assert_eq!(left.right_or_else(|x| x.parse().unwrap()), 3);

let right: Either<String, u32> = Right(3);
assert_eq!(right.right_or_else(|_| unreachable!()), 3);``````
source

#### pub fn unwrap_left(self) -> Lwhere R: Debug,

Returns the left value

##### Examples
``````let left: Either<_, ()> = Left(3);
assert_eq!(left.unwrap_left(), 3);``````
##### Panics

When `Either` is a `Right` value

``````let right: Either<(), _> = Right(3);
right.unwrap_left();``````
source

#### pub fn unwrap_right(self) -> Rwhere L: Debug,

Returns the right value

##### Examples
``````let right: Either<(), _> = Right(3);
assert_eq!(right.unwrap_right(), 3);``````
##### Panics

When `Either` is a `Left` value

``````let left: Either<_, ()> = Left(3);
left.unwrap_right();``````
source

#### pub fn expect_left(self, msg: &str) -> Lwhere R: Debug,

Returns the left value

##### Examples
``````let left: Either<_, ()> = Left(3);
assert_eq!(left.expect_left("value was Right"), 3);``````
##### Panics

When `Either` is a `Right` value

``````let right: Either<(), _> = Right(3);
right.expect_left("value was Right");``````
source

#### pub fn expect_right(self, msg: &str) -> Rwhere L: Debug,

Returns the right value

##### Examples
``````let right: Either<(), _> = Right(3);
assert_eq!(right.expect_right("value was Left"), 3);``````
##### Panics

When `Either` is a `Left` value

``````let left: Either<_, ()> = Left(3);
left.expect_right("value was Right");``````
source

#### pub fn either_into<T>(self) -> Twhere L: Into<T>, R: Into<T>,

Convert the contained value into `T`

##### Examples
``````// Both u16 and u32 can be converted to u64.
let left: Either<u16, u32> = Left(3u16);
assert_eq!(left.either_into::<u64>(), 3u64);
let right: Either<u16, u32> = Right(7u32);
assert_eq!(right.either_into::<u64>(), 7u64);``````
source§

### impl<L, R> Either<Option<L>, Option<R>>

source

#### pub fn factor_none(self) -> Option<Either<L, R>>

Factors out `None` from an `Either` of `Option`.

``````use either::*;
let left: Either<_, Option<String>> = Left(Some(vec![0]));
assert_eq!(left.factor_none(), Some(Left(vec![0])));

let right: Either<Option<Vec<u8>>, _> = Right(Some(String::new()));
assert_eq!(right.factor_none(), Some(Right(String::new())));``````
source§

### impl<L, R, E> Either<Result<L, E>, Result<R, E>>

source

#### pub fn factor_err(self) -> Result<Either<L, R>, E>

Factors out a homogenous type from an `Either` of `Result`.

Here, the homogeneous type is the `Err` type of the `Result`.

``````use either::*;
let left: Either<_, Result<String, u32>> = Left(Ok(vec![0]));
assert_eq!(left.factor_err(), Ok(Left(vec![0])));

let right: Either<Result<Vec<u8>, u32>, _> = Right(Ok(String::new()));
assert_eq!(right.factor_err(), Ok(Right(String::new())));``````
source§

### impl<T, L, R> Either<Result<T, L>, Result<T, R>>

source

#### pub fn factor_ok(self) -> Result<T, Either<L, R>>

Factors out a homogenous type from an `Either` of `Result`.

Here, the homogeneous type is the `Ok` type of the `Result`.

``````use either::*;
let left: Either<_, Result<u32, String>> = Left(Err(vec![0]));
assert_eq!(left.factor_ok(), Err(Left(vec![0])));

let right: Either<Result<u32, Vec<u8>>, _> = Right(Err(String::new()));
assert_eq!(right.factor_ok(), Err(Right(String::new())));``````
source§

### impl<T, L, R> Either<(T, L), (T, R)>

source

#### pub fn factor_first(self) -> (T, Either<L, R>)

Factor out a homogeneous type from an either of pairs.

Here, the homogeneous type is the first element of the pairs.

``````use either::*;
let left: Either<_, (u32, String)> = Left((123, vec![0]));
assert_eq!(left.factor_first().0, 123);

let right: Either<(u32, Vec<u8>), _> = Right((123, String::new()));
assert_eq!(right.factor_first().0, 123);``````
source§

### impl<T, L, R> Either<(L, T), (R, T)>

source

#### pub fn factor_second(self) -> (Either<L, R>, T)

Factor out a homogeneous type from an either of pairs.

Here, the homogeneous type is the second element of the pairs.

``````use either::*;
let left: Either<_, (String, u32)> = Left((vec![0], 123));
assert_eq!(left.factor_second().1, 123);

let right: Either<(Vec<u8>, u32), _> = Right((String::new(), 123));
assert_eq!(right.factor_second().1, 123);``````
source§

### impl<T> Either<T, T>

source

#### pub fn into_inner(self) -> T

Extract the value of an either over two equivalent types.

``````use either::*;

let left: Either<_, u32> = Left(123);
assert_eq!(left.into_inner(), 123);

let right: Either<u32, _> = Right(123);
assert_eq!(right.into_inner(), 123);``````
source

#### pub fn map<F, M>(self, f: F) -> Either<M, M> ⓘwhere F: FnOnce(T) -> M,

Map `f` over the contained value and return the result in the corresponding variant.

``````use either::*;

let value: Either<_, i32> = Right(42);

let other = value.map(|x| x * 2);
assert_eq!(other, Right(84));``````

## Trait Implementations§

source§

### impl<L, R, Target> AsMut<[Target]> for Either<L, R>where L: AsMut<[Target]>, R: AsMut<[Target]>,

source§

#### fn as_mut(&mut self) -> &mut [Target]ⓘ

Converts this type into a mutable reference of the (usually inferred) input type.
source§

### impl<L, R> AsMut<CStr> for Either<L, R>where L: AsMut<CStr>, R: AsMut<CStr>,

Requires crate feature `use_std`.

source§

#### fn as_mut(&mut self) -> &mut CStr

Converts this type into a mutable reference of the (usually inferred) input type.
source§

### impl<L, R> AsMut<OsStr> for Either<L, R>where L: AsMut<OsStr>, R: AsMut<OsStr>,

Requires crate feature `use_std`.

source§

#### fn as_mut(&mut self) -> &mut OsStr

Converts this type into a mutable reference of the (usually inferred) input type.
source§

### impl<L, R> AsMut<Path> for Either<L, R>where L: AsMut<Path>, R: AsMut<Path>,

Requires crate feature `use_std`.

source§

#### fn as_mut(&mut self) -> &mut Path

Converts this type into a mutable reference of the (usually inferred) input type.
source§

### impl<L, R, Target> AsMut<Target> for Either<L, R>where L: AsMut<Target>, R: AsMut<Target>,

source§

#### fn as_mut(&mut self) -> &mut Target

Converts this type into a mutable reference of the (usually inferred) input type.
source§

### impl<L, R> AsMut<str> for Either<L, R>where L: AsMut<str>, R: AsMut<str>,

source§

#### fn as_mut(&mut self) -> &mut str

Converts this type into a mutable reference of the (usually inferred) input type.
source§

### impl<L, R, Target> AsRef<[Target]> for Either<L, R>where L: AsRef<[Target]>, R: AsRef<[Target]>,

source§

#### fn as_ref(&self) -> &[Target]ⓘ

Converts this type into a shared reference of the (usually inferred) input type.
source§

### impl<L, R> AsRef<CStr> for Either<L, R>where L: AsRef<CStr>, R: AsRef<CStr>,

Requires crate feature `use_std`.

source§

#### fn as_ref(&self) -> &CStr

Converts this type into a shared reference of the (usually inferred) input type.
source§

### impl<L, R> AsRef<OsStr> for Either<L, R>where L: AsRef<OsStr>, R: AsRef<OsStr>,

Requires crate feature `use_std`.

source§

#### fn as_ref(&self) -> &OsStr

Converts this type into a shared reference of the (usually inferred) input type.
source§

### impl<L, R> AsRef<Path> for Either<L, R>where L: AsRef<Path>, R: AsRef<Path>,

Requires crate feature `use_std`.

source§

#### fn as_ref(&self) -> &Path

Converts this type into a shared reference of the (usually inferred) input type.
source§

### impl<L, R, Target> AsRef<Target> for Either<L, R>where L: AsRef<Target>, R: AsRef<Target>,

source§

#### fn as_ref(&self) -> &Target

Converts this type into a shared reference of the (usually inferred) input type.
source§

### impl<L, R> AsRef<str> for Either<L, R>where L: AsRef<str>, R: AsRef<str>,

source§

#### fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
source§

### impl<L, R> BufRead for Either<L, R>where L: BufRead, R: BufRead,

Requires crate feature `"use_std"`

source§

#### fn fill_buf(&mut self) -> Result<&[u8], Error>

Returns the contents of the internal buffer, filling it with more data from the inner reader if it is empty. Read more
source§

#### fn consume(&mut self, amt: usize)

Tells this buffer that `amt` bytes have been consumed from the buffer, so they should no longer be returned in calls to `read`. Read more
source§

#### fn read_until( &mut self, byte: u8, buf: &mut Vec<u8, Global> ) -> Result<usize, Error>

Read all bytes into `buf` until the delimiter `byte` or EOF is reached. Read more
source§

#### fn read_line(&mut self, buf: &mut String) -> Result<usize, Error>

Read all bytes until a newline (the `0xA` byte) is reached, and append them to the provided `String` buffer. Read more
source§

#### fn has_data_left(&mut self) -> Result<bool, Error>

🔬This is a nightly-only experimental API. (`buf_read_has_data_left`)
Check if the underlying `Read` has any data left to be read. Read more
1.0.0 · source§

#### fn split(self, byte: u8) -> Split<Self>where Self: Sized,

Returns an iterator over the contents of this reader split on the byte `byte`. Read more
1.0.0 · source§

#### fn lines(self) -> Lines<Self>where Self: Sized,

Returns an iterator over the lines of this reader. Read more
source§

### impl<L, R> Clone for Either<L, R>where L: Clone, R: Clone,

source§

#### fn clone(&self) -> Either<L, R> ⓘ

Returns a copy of the value. Read more
source§

#### fn clone_from(&mut self, source: &Either<L, R>)

Performs copy-assignment from `source`. Read more
source§

### impl<L, R> Debug for Either<L, R>where L: Debug, R: Debug,

source§

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

### impl<L, R> Deref for Either<L, R>where L: Deref, R: Deref<Target = <L as Deref>::Target>,

§

#### type Target = <L as Deref>::Target

The resulting type after dereferencing.
source§

#### fn deref(&self) -> &<Either<L, R> as Deref>::Targetⓘ

Dereferences the value.
source§

### impl<L, R> DerefMut for Either<L, R>where L: DerefMut, R: DerefMut<Target = <L as Deref>::Target>,

source§

#### fn deref_mut(&mut self) -> &mut <Either<L, R> as Deref>::Targetⓘ

Mutably dereferences the value.
source§

### impl<L, R> Display for Either<L, R>where L: Display, R: Display,

source§

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

### impl<L, R> DoubleEndedIterator for Either<L, R>where L: DoubleEndedIterator, R: DoubleEndedIterator<Item = <L as Iterator>::Item>,

source§

#### fn next_back(&mut self) -> Option<<Either<L, R> as Iterator>::Item>

Removes and returns an element from the end of the iterator. Read more
source§

#### fn rfold<Acc, G>(self, init: Acc, f: G) -> Accwhere G: FnMut(Acc, <Either<L, R> as Iterator>::Item) -> Acc,

An iterator method that reduces the iterator’s elements to a single, final value, starting from the back. Read more
source§

#### fn rfind<P>(&mut self, predicate: P) -> Option<<Either<L, R> as Iterator>::Item>where P: FnMut(&<Either<L, R> as Iterator>::Item) -> bool,

Searches for an element of an iterator from the back that satisfies a predicate. Read more
source§

#### fn advance_back_by(&mut self, n: usize) -> Result<(), usize>

🔬This is a nightly-only experimental API. (`iter_advance_by`)
Advances the iterator from the back by `n` elements. Read more
1.37.0 · source§

#### fn nth_back(&mut self, n: usize) -> Option<Self::Item>

Returns the `n`th element from the end of the iterator. Read more
1.27.0 · source§

#### fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> Rwhere Self: Sized, F: FnMut(B, Self::Item) -> R, R: Try<Output = B>,

This is the reverse version of `Iterator::try_fold()`: it takes elements starting from the back of the iterator. Read more
source§

### impl<L, R> Error for Either<L, R>where L: Error, R: Error,

`Either` implements `Error` if both `L` and `R` implement it.

source§

#### fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

#### fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

#### fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

#### fn provide<'a>(&'a self, demand: &mut Demand<'a>)

🔬This is a nightly-only experimental API. (`error_generic_member_access`)
Provides type based access to context intended for error reports. Read more
source§

### impl<L, R> ExactSizeIterator for Either<L, R>where L: ExactSizeIterator, R: ExactSizeIterator<Item = <L as Iterator>::Item>,

source§

#### fn len(&self) -> usize

Returns the exact remaining length of the iterator. Read more
source§

#### fn is_empty(&self) -> bool

🔬This is a nightly-only experimental API. (`exact_size_is_empty`)
Returns `true` if the iterator is empty. Read more
source§

### impl<L, R, A> Extend<A> for Either<L, R>where L: Extend<A>, R: Extend<A>,

source§

#### fn extend<T>(&mut self, iter: T)where T: IntoIterator<Item = A>,

Extends a collection with the contents of an iterator. Read more
source§

#### fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (`extend_one`)
Extends a collection with exactly one element.
source§

#### fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (`extend_one`)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

### impl<L, R> From<Result<R, L>> for Either<L, R>

Convert from `Result` to `Either` with `Ok => Right` and `Err => Left`.

source§

#### fn from(r: Result<R, L>) -> Either<L, R> ⓘ

Converts to this type from the input type.
source§

### impl<L, R> Future for Either<L, R>where L: Future, R: Future<Output = <L as Future>::Output>,

`Either<L, R>` is a future if both `L` and `R` are futures.

§

#### type Output = <L as Future>::Output

The type of value produced on completion.
source§

#### fn poll( self: Pin<&mut Either<L, R>>, cx: &mut Context<'_> ) -> Poll<<Either<L, R> as Future>::Output>

Attempt to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more
source§

### impl<L, R> Hash for Either<L, R>where L: Hash, R: Hash,

source§

#### fn hash<__H>(&self, state: &mut __H)where __H: Hasher,

Feeds this value into the given `Hasher`. Read more
1.3.0 · source§

#### fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given `Hasher`. Read more
source§

### impl<L, R> Into<Result<R, L>> for Either<L, R>

Convert from `Either` to `Result` with `Right => Ok` and `Left => Err`.

source§

#### fn into(self) -> Result<R, L>

Converts this type into the (usually inferred) input type.
source§

### impl<L, R> Iterator for Either<L, R>where L: Iterator, R: Iterator<Item = <L as Iterator>::Item>,

`Either<L, R>` is an iterator if both `L` and `R` are iterators.

§

#### type Item = <L as Iterator>::Item

The type of the elements being iterated over.
source§

#### fn next(&mut self) -> Option<<Either<L, R> as Iterator>::Item>

Advances the iterator and returns the next value. Read more
source§

#### fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
source§

#### fn fold<Acc, G>(self, init: Acc, f: G) -> Accwhere G: FnMut(Acc, <Either<L, R> as Iterator>::Item) -> Acc,

Folds every element into an accumulator by applying an operation, returning the final result. Read more
source§

#### fn for_each<F>(self, f: F)where F: FnMut(<Either<L, R> as Iterator>::Item),

Calls a closure on each element of an iterator. Read more
source§

#### fn count(self) -> usize

Consumes the iterator, counting the number of iterations and returning it. Read more
source§

#### fn last(self) -> Option<<Either<L, R> as Iterator>::Item>

Consumes the iterator, returning the last element. Read more
source§

#### fn nth(&mut self, n: usize) -> Option<<Either<L, R> as Iterator>::Item>

Returns the `n`th element of the iterator. Read more
source§

#### fn collect<B>(self) -> Bwhere B: FromIterator<<Either<L, R> as Iterator>::Item>,

Transforms an iterator into a collection. Read more
source§

#### fn partition<B, F>(self, f: F) -> (B, B)where B: Default + Extend<<Either<L, R> as Iterator>::Item>, F: FnMut(&<Either<L, R> as Iterator>::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
source§

#### fn all<F>(&mut self, f: F) -> boolwhere F: FnMut(<Either<L, R> as Iterator>::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
source§

#### fn any<F>(&mut self, f: F) -> boolwhere F: FnMut(<Either<L, R> as Iterator>::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
source§

#### fn find<P>(&mut self, predicate: P) -> Option<<Either<L, R> as Iterator>::Item>where P: FnMut(&<Either<L, R> as Iterator>::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
source§

#### fn find_map<B, F>(&mut self, f: F) -> Option<B>where F: FnMut(<Either<L, R> as Iterator>::Item) -> Option<B>,

Applies function to the elements of iterator and returns the first non-none result. Read more
source§

#### fn position<P>(&mut self, predicate: P) -> Option<usize>where P: FnMut(<Either<L, R> as Iterator>::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
source§

#### fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where Self: Sized,

🔬This is a nightly-only experimental API. (`iter_next_chunk`)
Advances the iterator and returns an array containing the next `N` values. Read more
source§

#### fn advance_by(&mut self, n: usize) -> Result<(), usize>

🔬This is a nightly-only experimental API. (`iter_advance_by`)
Advances the iterator by `n` elements. Read more
1.28.0 · source§

#### fn step_by(self, step: usize) -> StepBy<Self>where Self: Sized,

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more
1.0.0 · source§

#### fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where Self: Sized, U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · source§

#### fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where Self: Sized, U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
source§

#### fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where Self: Sized, G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (`iter_intersperse`)
Creates a new iterator which places an item generated by `separator` between adjacent items of the original iterator. Read more
1.0.0 · source§

#### fn map<B, F>(self, f: F) -> Map<Self, F>where Self: Sized, F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each element. Read more
1.0.0 · source§

#### fn filter<P>(self, predicate: P) -> Filter<Self, P>where Self: Sized, P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element should be yielded. Read more
1.0.0 · source§

#### fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where Self: Sized, F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · source§

#### fn enumerate(self) -> Enumerate<Self>where Self: Sized,

Creates an iterator which gives the current iteration count as well as the next value. Read more
1.0.0 · source§

#### fn peekable(self) -> Peekable<Self>where Self: Sized,

Creates an iterator which can use the `peek` and `peek_mut` methods to look at the next element of the iterator without consuming it. See their documentation for more information. Read more
1.0.0 · source§

#### fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where Self: Sized, P: FnMut(&Self::Item) -> bool,

Creates an iterator that `skip`s elements based on a predicate. Read more
1.0.0 · source§

#### fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where Self: Sized, P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · source§

#### fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where Self: Sized, P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · source§

#### fn skip(self, n: usize) -> Skip<Self>where Self: Sized,

Creates an iterator that skips the first `n` elements. Read more
1.0.0 · source§

#### fn take(self, n: usize) -> Take<Self>where Self: Sized,

Creates an iterator that yields the first `n` elements, or fewer if the underlying iterator ends sooner. Read more
1.0.0 · source§

#### fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where Self: Sized, F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like `fold`, holds internal state, but unlike `fold`, produces a new iterator. Read more
1.0.0 · source§

#### fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where Self: Sized, U: IntoIterator, F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.0.0 · source§

#### fn fuse(self) -> Fuse<Self>where Self: Sized,

Creates an iterator which ends after the first `None`. Read more
1.0.0 · source§

#### fn inspect<F>(self, f: F) -> Inspect<Self, F>where Self: Sized, F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · source§

#### fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

Borrows an iterator, rather than consuming it. Read more
source§

#### fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere E: Extend<Self::Item>, Self: Sized,

🔬This is a nightly-only experimental API. (`iter_collect_into`)
Collects all the items from an iterator into a collection. Read more
source§

#### fn is_partitioned<P>(self, predicate: P) -> boolwhere Self: Sized, P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (`iter_is_partitioned`)
Checks if the elements of this iterator are partitioned according to the given predicate, such that all those that return `true` precede all those that return `false`. Read more
1.27.0 · source§

#### fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere Self: Sized, F: FnMut(B, Self::Item) -> R, R: Try<Output = B>,

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more
1.27.0 · source§

#### fn try_for_each<F, R>(&mut self, f: F) -> Rwhere Self: Sized, F: FnMut(Self::Item) -> R, R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more
1.51.0 · source§

#### fn reduce<F>(self, f: F) -> Option<Self::Item>where Self: Sized, F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing operation. Read more
source§

#### fn try_reduce<F, R>( &mut self, f: F ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere Self: Sized, F: FnMut(Self::Item, Self::Item) -> R, R: Try<Output = Self::Item>, <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (`iterator_try_reduce`)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the closure returns a failure, the failure is propagated back to the caller immediately. Read more
source§

#### fn try_find<F, R>( &mut self, f: F ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere Self: Sized, F: FnMut(&Self::Item) -> R, R: Try<Output = bool>, <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (`try_find`)
Applies function to the elements of iterator and returns the first true result or the first error. Read more
1.6.0 · source§

#### fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where B: Ord, Self: Sized, F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the specified function. Read more
1.15.0 · source§

#### fn max_by<F>(self, compare: F) -> Option<Self::Item>where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the specified comparison function. Read more
1.6.0 · source§

#### fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where B: Ord, Self: Sized, F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the specified function. Read more
1.15.0 · source§

#### fn min_by<F>(self, compare: F) -> Option<Self::Item>where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the specified comparison function. Read more
1.0.0 · source§

#### fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where FromA: Default + Extend<A>, FromB: Default + Extend<B>, Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · source§

#### fn copied<'a, T>(self) -> Copied<Self>where T: 'a + Copy, Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · source§

#### fn cloned<'a, T>(self) -> Cloned<Self>where T: 'a + Clone, Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which `clone`s all of its elements. Read more
source§

#### fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where Self: Sized,

🔬This is a nightly-only experimental API. (`iter_array_chunks`)
Returns an iterator over `N` elements of the iterator at a time. Read more
1.11.0 · source§

#### fn sum<S>(self) -> Swhere Self: Sized, S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · source§

#### fn product<P>(self) -> Pwhere Self: Sized, P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
source§

#### fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere Self: Sized, I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (`iter_order_by`)
Lexicographically compares the elements of this `Iterator` with those of another with respect to the specified comparison function. Read more
1.5.0 · source§

#### fn partial_cmp<I>(self, other: I) -> Option<Ordering>where I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Lexicographically compares the `PartialOrd` elements of this `Iterator` with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. As soon as an order can be determined, the evaluation stops and a result is returned. Read more
source§

#### fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where Self: Sized, I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (`iter_order_by`)
Lexicographically compares the elements of this `Iterator` with those of another with respect to the specified comparison function. Read more
1.5.0 · source§

#### fn eq<I>(self, other: I) -> boolwhere I: IntoIterator, Self::Item: PartialEq<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this `Iterator` are equal to those of another. Read more
source§

#### fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere Self: Sized, I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (`iter_order_by`)
Determines if the elements of this `Iterator` are equal to those of another with respect to the specified equality function. Read more
1.5.0 · source§

#### fn ne<I>(self, other: I) -> boolwhere I: IntoIterator, Self::Item: PartialEq<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this `Iterator` are not equal to those of another. Read more
1.5.0 · source§

#### fn lt<I>(self, other: I) -> boolwhere I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this `Iterator` are lexicographically less than those of another. Read more
1.5.0 · source§

#### fn le<I>(self, other: I) -> boolwhere I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this `Iterator` are lexicographically less or equal to those of another. Read more
1.5.0 · source§

#### fn gt<I>(self, other: I) -> boolwhere I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this `Iterator` are lexicographically greater than those of another. Read more
1.5.0 · source§

#### fn ge<I>(self, other: I) -> boolwhere I: IntoIterator, Self::Item: PartialOrd<<I as IntoIterator>::Item>, Self: Sized,

Determines if the elements of this `Iterator` are lexicographically greater than or equal to those of another. Read more
source§

#### fn is_sorted_by<F>(self, compare: F) -> boolwhere Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (`is_sorted`)
Checks if the elements of this iterator are sorted using the given comparator function. Read more
source§

#### fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere Self: Sized, F: FnMut(Self::Item) -> K, K: PartialOrd<K>,

🔬This is a nightly-only experimental API. (`is_sorted`)
Checks if the elements of this iterator are sorted using the given key extraction function. Read more
source§

### impl<L, R> Ord for Either<L, R>where L: Ord, R: Ord,

source§

#### fn cmp(&self, other: &Either<L, R>) -> Ordering

This method returns an `Ordering` between `self` and `other`. Read more
1.21.0 · source§

#### fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

#### fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

#### fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

### impl<L, R> PartialEq<Either<L, R>> for Either<L, R>where L: PartialEq<L>, R: PartialEq<R>,

source§

#### fn eq(&self, other: &Either<L, R>) -> bool

This method tests for `self` and `other` values to be equal, and is used by `==`.
1.0.0 · source§

#### fn ne(&self, other: &Rhs) -> bool

This method tests for `!=`. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

### impl<L, R> PartialOrd<Either<L, R>> for Either<L, R>where L: PartialOrd<L>, R: PartialOrd<R>,

source§

#### fn partial_cmp(&self, other: &Either<L, R>) -> Option<Ordering>

This method returns an ordering between `self` and `other` values if one exists. Read more
1.0.0 · source§

#### fn lt(&self, other: &Rhs) -> bool

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more
1.0.0 · source§

#### fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more
1.0.0 · source§

#### fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more
1.0.0 · source§

#### fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more
source§

### impl<L, R> Read for Either<L, R>where L: Read, R: Read,

`Either<L, R>` implements `Read` if both `L` and `R` do.

Requires crate feature `"use_std"`

source§

#### fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
source§

#### fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Read the exact number of bytes required to fill `buf`. Read more
source§

#### fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>

Read all bytes until EOF in this source, placing them into `buf`. Read more
source§

#### fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Read all bytes until EOF in this source, appending them to `buf`. Read more
1.36.0 · source§

#### fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like `read`, except that it reads into a slice of buffers. Read more
source§

#### fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (`can_vector`)
Determines if this `Read`er has an efficient `read_vectored` implementation. Read more
source§

#### fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (`read_buf`)
Pull some bytes from this source into the specified buffer. Read more
source§

#### fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (`read_buf`)
Read the exact number of bytes required to fill `cursor`. Read more
1.0.0 · source§

#### fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

Creates a “by reference” adaptor for this instance of `Read`. Read more
1.0.0 · source§

#### fn bytes(self) -> Bytes<Self>where Self: Sized,

Transforms this `Read` instance to an `Iterator` over its bytes. Read more
1.0.0 · source§

#### fn chain<R>(self, next: R) -> Chain<Self, R>where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · source§

#### fn take(self, limit: u64) -> Take<Self>where Self: Sized,

Creates an adapter which will read at most `limit` bytes from it. Read more
source§

### impl<L, R> Seek for Either<L, R>where L: Seek, R: Seek,

`Either<L, R>` implements `Seek` if both `L` and `R` do.

Requires crate feature `"use_std"`

source§

#### fn seek(&mut self, pos: SeekFrom) -> Result<u64, Error>

Seek to an offset, in bytes, in a stream. Read more
1.55.0 · source§

#### fn rewind(&mut self) -> Result<(), Error>

Rewind to the beginning of a stream. Read more
source§

#### fn stream_len(&mut self) -> Result<u64, Error>

🔬This is a nightly-only experimental API. (`seek_stream_len`)
Returns the length of this stream (in bytes). Read more
1.51.0 · source§

#### fn stream_position(&mut self) -> Result<u64, Error>

Returns the current seek position from the start of the stream. Read more
source§

### impl<L, R> Write for Either<L, R>where L: Write, R: Write,

`Either<L, R>` implements `Write` if both `L` and `R` do.

Requires crate feature `"use_std"`

source§

#### fn write(&mut self, buf: &[u8]) -> Result<usize, Error>

Write a buffer into this writer, returning how many bytes were written. Read more
source§

#### fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
source§

#### fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
source§

#### fn flush(&mut self) -> Result<(), Error>

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · source§

#### fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like `write`, except that it writes from a slice of buffers. Read more
source§

#### fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (`can_vector`)
Determines if this `Write`r has an efficient `write_vectored` implementation. Read more
source§

#### fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (`write_all_vectored`)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · source§

#### fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,

Creates a “by reference” adapter for this instance of `Write`. Read more
source§

source§

source§

source§

source§

§

§

§

§

§

## Blanket Implementations§

source§

### impl<T> Any for Twhere T: 'static + ?Sized,

source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
source§

### impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

### impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

### impl<T> From<T> for T

const: unstable · source§

#### fn from(t: T) -> T

Returns the argument unchanged.

source§

### impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

source§

### impl<F> IntoFuture for Fwhere F: Future,

§

#### type Output = <F as Future>::Output

The output that the future will produce on completion.
§

#### type IntoFuture = F

Which kind of future are we turning this into?
source§

#### fn into_future(self) -> <F as IntoFuture>::IntoFuture

Creates a future from a value. Read more
source§

### impl<I> IntoIterator for Iwhere I: Iterator,

§

#### type Item = <I as Iterator>::Item

The type of the elements being iterated over.
§

#### type IntoIter = I

Which kind of iterator are we turning this into?
const: unstable · source§

#### fn into_iter(self) -> I

Creates an iterator from a value. Read more
source§

### impl<T> Itertools for Twhere T: Iterator + ?Sized,

source§

#### fn interleave<J>(self, other: J) -> Interleave<Self, J::IntoIter> ⓘwhere J: IntoIterator<Item = Self::Item>, Self: Sized,

Alternate elements from two iterators until both have run out. Read more
source§

#### fn interleave_shortest<J>( self, other: J ) -> InterleaveShortest<Self, J::IntoIter> ⓘwhere J: IntoIterator<Item = Self::Item>, Self: Sized,

Alternate elements from two iterators until at least one of them has run out. Read more
source§

#### fn intersperse(self, element: Self::Item) -> Intersperse<Self> ⓘwhere Self: Sized, Self::Item: Clone,

An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
source§

#### fn zip_longest<J>(self, other: J) -> ZipLongest<Self, J::IntoIter> ⓘwhere J: IntoIterator, Self: Sized,

Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of two optional elements. Read more
source§

#### fn zip_eq<J>(self, other: J) -> ZipEq<Self, J::IntoIter> ⓘwhere J: IntoIterator, Self: Sized,

Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
source§

#### fn batching<B, F>(self, f: F) -> Batching<Self, F> ⓘwhere F: FnMut(&mut Self) -> Option<B>, Self: Sized,

A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
source§

#### fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where Self: Sized, F: FnMut(&Self::Item) -> K, K: PartialEq,

Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned to the same group. Read more
source§

#### fn chunks(self, size: usize) -> IntoChunks<Self>where Self: Sized,

Return an iterable that can chunk the iterator. Read more
source§

#### fn tuple_windows<T>(self) -> TupleWindows<Self, T> ⓘwhere Self: Sized + Iterator<Item = T::Item>, T: TupleCollect, T::Item: Clone,

Return an iterator over all contiguous windows producing tuples of a specific size (up to 4). Read more
source§

#### fn tuples<T>(self) -> Tuples<Self, T> ⓘwhere Self: Sized + Iterator<Item = T::Item>, T: TupleCollect,

Return an iterator that groups the items in tuples of a specific size (up to 4). Read more
source§

#### fn tee(self) -> (Tee<Self>, Tee<Self>)where Self: Sized, Self::Item: Clone,

Split into an iterator pair that both yield all elements from the original iterator. Read more
source§

#### fn step(self, n: usize) -> Step<Self> ⓘwhere Self: Sized,

👎Deprecated since 0.8: Use std .step_by() instead
Return an iterator adaptor that steps `n` elements in the base iterator for each iteration. Read more
source§

#### fn map_into<R>(self) -> MapInto<Self, R> ⓘwhere Self: Sized, Self::Item: Into<R>,

Convert each item of the iterator using the `Into` trait. Read more
source§

#### fn map_results<F, T, U, E>(self, f: F) -> MapResults<Self, F> ⓘwhere Self: Iterator<Item = Result<T, E>> + Sized, F: FnMut(T) -> U,

Return an iterator adaptor that applies the provided closure to every `Result::Ok` value. `Result::Err` values are unchanged. Read more
source§

#### fn merge<J>(self, other: J) -> Merge<Self, J::IntoIter> ⓘwhere Self: Sized, Self::Item: PartialOrd, J: IntoIterator<Item = Self::Item>,

Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
source§

#### fn merge_by<J, F>(self, other: J, is_first: F) -> MergeBy<Self, J::IntoIter, F> ⓘwhere Self: Sized, J: IntoIterator<Item = Self::Item>, F: FnMut(&Self::Item, &Self::Item) -> bool,

Return an iterator adaptor that merges the two base iterators in order. This is much like `.merge()` but allows for a custom ordering. Read more
source§

#### fn merge_join_by<J, F>( self, other: J, cmp_fn: F ) -> MergeJoinBy<Self, J::IntoIter, F> ⓘwhere J: IntoIterator, F: FnMut(&Self::Item, &J::Item) -> Ordering, Self: Sized,

Create an iterator that merges items from both this and the specified iterator in ascending order. Read more
source§

#### fn kmerge(self) -> KMerge<<Self::Item as IntoIterator>::IntoIter> ⓘwhere Self: Sized, Self::Item: IntoIterator, <Self::Item as IntoIterator>::Item: PartialOrd,

Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
source§

#### fn kmerge_by<F>( self, first: F ) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F> ⓘwhere Self: Sized, Self::Item: IntoIterator, F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
source§

#### fn cartesian_product<J>(self, other: J) -> Product<Self, J::IntoIter> ⓘwhere Self: Sized, Self::Item: Clone, J: IntoIterator, J::IntoIter: Clone,

Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators `self` and `J`. Read more
source§

#### fn multi_cartesian_product( self ) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter> ⓘwhere Self: Iterator + Sized, Self::Item: IntoIterator, <Self::Item as IntoIterator>::IntoIter: Clone, <Self::Item as IntoIterator>::Item: Clone,

Return an iterator adaptor that iterates over the cartesian product of all subiterators returned by meta-iterator `self`. Read more
source§

#### fn coalesce<F>(self, f: F) -> Coalesce<Self, F> ⓘwhere Self: Sized, F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

Return an iterator adaptor that uses the passed-in closure to optionally merge together consecutive elements. Read more
source§

#### fn dedup(self) -> Dedup<Self> ⓘwhere Self: Sized, Self::Item: PartialEq,

Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
source§

#### fn unique(self) -> Unique<Self> ⓘwhere Self: Sized, Self::Item: Clone + Eq + Hash,

Return an iterator adaptor that filters out elements that have already been produced once during the iteration. Duplicates are detected using hash and equality. Read more
source§

#### fn unique_by<V, F>(self, f: F) -> UniqueBy<Self, V, F> ⓘwhere Self: Sized, V: Eq + Hash, F: FnMut(&Self::Item) -> V,

Return an iterator adaptor that filters out elements that have already been produced once during the iteration. Read more
source§

#### fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F> ⓘwhere Self: Sized + PeekingNext, F: FnMut(&Self::Item) -> bool,

Return an iterator adaptor that borrows from this iterator and takes items while the closure `accept` returns `true`. Read more
source§

#### fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F> ⓘwhere Self: Clone, F: FnMut(&Self::Item) -> bool,

Return an iterator adaptor that borrows from a `Clone`-able iterator to only pick off elements while the predicate `accept` returns `true`. Read more
source§

#### fn while_some<A>(self) -> WhileSome<Self> ⓘwhere Self: Sized + Iterator<Item = Option<A>>,

Return an iterator adaptor that filters `Option<A>` iterator elements and produces `A`. Stops on the first `None` encountered. Read more
source§

#### fn tuple_combinations<T>(self) -> TupleCombinations<Self, T> ⓘwhere Self: Sized + Clone, Self::Item: Clone, T: HasCombination<Self>,

Return an iterator adaptor that iterates over the combinations of the elements from an iterator. Read more
source§

#### fn combinations(self, n: usize) -> Combinations<Self> ⓘwhere Self: Sized, Self::Item: Clone,

Return an iterator adaptor that iterates over the `n`-length combinations of the elements from an iterator. Read more
source§

#### fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F> ⓘwhere Self: Sized, F: FnMut(usize) -> Self::Item,

Return an iterator adaptor that pads the sequence to a minimum length of `min` by filling missing elements using a closure `f`. Read more
source§

#### fn with_position(self) -> WithPosition<Self> ⓘwhere Self: Sized,

Return an iterator adaptor that wraps each element in a `Position` to ease special-case handling of the first or last elements. Read more
source§

#### fn positions<P>(self, predicate: P) -> Positions<Self, P> ⓘwhere Self: Sized, P: FnMut(Self::Item) -> bool,

Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
source§

#### fn update<F>(self, updater: F) -> Update<Self, F> ⓘwhere Self: Sized, F: FnMut(&mut Self::Item),

Return an iterator adaptor that applies a mutating function to each element before yielding it. Read more
source§

#### fn next_tuple<T>(&mut self) -> Option<T>where Self: Sized + Iterator<Item = T::Item>, T: TupleCollect,

Advances the iterator and returns the next items grouped in a tuple of a specific size (up to 4). Read more
source§

#### fn collect_tuple<T>(self) -> Option<T>where Self: Sized + Iterator<Item = T::Item>, T: TupleCollect,

Collects all items from the iterator into a tuple of a specific size (up to 4). Read more
source§

#### fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where P: FnMut(&Self::Item) -> bool,

Find the position and value of the first element satisfying a predicate. Read more
source§

#### fn all_equal(&mut self) -> boolwhere Self::Item: PartialEq,

Check whether all elements compare equal. Read more
source§

#### fn dropping(self, n: usize) -> Selfwhere Self: Sized,

Consume the first `n` elements from the iterator eagerly, and return the same iterator again. Read more
source§

#### fn dropping_back(self, n: usize) -> Selfwhere Self: Sized + DoubleEndedIterator,

Consume the last `n` elements from the iterator eagerly, and return the same iterator again. Read more
source§

#### fn foreach<F>(self, f: F)where F: FnMut(Self::Item), Self: Sized,

👎Deprecated since 0.8: Use .for_each() instead
Run the closure `f` eagerly on each element of the iterator. Read more
source§

#### fn concat(self) -> Self::Itemwhere Self: Sized, Self::Item: Extend<<<Self as Iterator>::Item as IntoIterator>::Item> + IntoIterator + Default,

Combine all an iterator’s elements into one element by using `Extend`. Read more
source§

#### fn collect_vec(self) -> Vec<Self::Item>where Self: Sized,

`.collect_vec()` is simply a type specialization of `.collect()`, for convenience.
source§

#### fn set_from<'a, A: 'a, J>(&mut self, from: J) -> usizewhere Self: Iterator<Item = &'a mut A>, J: IntoIterator<Item = A>,

Assign to each reference in `self` from the `from` iterator, stopping at the shortest of the two iterators. Read more
source§

#### fn join(&mut self, sep: &str) -> Stringwhere Self::Item: Display,

Combine all iterator elements into one String, seperated by `sep`. Read more
source§

#### fn format(self, sep: &str) -> Format<'_, Self>where Self: Sized,

Format all iterator elements, separated by `sep`. Read more
source§

#### fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where Self: Sized, F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result) -> Result,

Format all iterator elements, separated by `sep`. Read more
source§

#### fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where Self: Iterator<Item = Result<A, E>>, F: FnMut(B, A) -> B,

Fold `Result` values from an iterator. Read more
source§

#### fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where Self: Iterator<Item = Option<A>>, F: FnMut(B, A) -> B,

Fold `Option` values from an iterator. Read more
source§

#### fn fold1<F>(self, f: F) -> Option<Self::Item>where F: FnMut(Self::Item, Self::Item) -> Self::Item, Self: Sized,

Accumulator of the elements in the iterator. Read more
source§

#### fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where F: FnMut(Self::Item, Self::Item) -> Self::Item, Self: Sized,

Accumulate the elements in the iterator in a tree-like manner. Read more
source§

#### fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where Self: Sized, F: FnMut(B, Self::Item) -> FoldWhile<B>,

👎Deprecated since 0.8: Use .try_fold() instead
An iterator method that applies a function, producing a single, final value. Read more
source§

#### fn sorted(self) -> IntoIter<Self::Item>where Self: Sized, Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

#### fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item>where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

#### fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item>where Self: Sized, K: Ord, F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

#### fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where Self: Sized, F: Fn(Self::Item) -> Either<L, R>, A: Default + Extend<L>, B: Default + Extend<R>,

Collect all iterator elements into one of two partitions. Unlike `Iterator::partition`, each partition may have a distinct type. Read more
source§

#### fn into_group_map<K, V>(self) -> HashMap<K, Vec<V>>where Self: Iterator<Item = (K, V)> + Sized, K: Hash + Eq,

Return a `HashMap` of keys mapped to `Vec`s of values. Keys and values are taken from `(Key, Value)` tuple pairs yielded by the input iterator. Read more
source§

#### fn minmax(self) -> MinMaxResult<Self::Item>where Self: Sized, Self::Item: PartialOrd,

Return the minimum and maximum elements in the iterator. Read more
source§

#### fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where Self: Sized, K: PartialOrd, F: FnMut(&Self::Item) -> K,

Return the minimum and maximum element of an iterator, as determined by the specified function. Read more
source§

#### fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where Self: Sized, F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the minimum and maximum element of an iterator, as determined by the specified comparison function. Read more
source§

### impl<E> Provider for Ewhere E: Error + ?Sized,

source§

#### fn provide<'a>(&'a self, demand: &mut Demand<'a>)

🔬This is a nightly-only experimental API. (`provide_any`)
Data providers should implement this method to provide all values they are able to provide by using `demand`. Read more
source§

### impl<T> ToOwned for Twhere T: Clone,

§

#### type Owned = T

The resulting type after obtaining ownership.
source§

#### fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

#### fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

### impl<T> ToString for Twhere T: Display + ?Sized,

source§

#### default fn to_string(&self) -> String

Converts the given value to a `String`. Read more
source§

### impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

#### type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

### impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.