Trait Extend
pub trait Extend<A>
Extend a collection with the contents of an iterator.
Iterators produce a series of values, and collections can also be thought
of as a series of values. The Extend trait bridges this gap, allowing you
to extend a collection by including the contents of that iterator. When
extending a collection with an already existing key, that entry is updated
or, in the case of collections that permit multiple entries with equal
keys, that entry is inserted.
Examples
Basic usage:
// You can extend a String with some chars:
let mut message = Stringfrom;
message.extend;
assert_eq!;
Implementing Extend:
// A sample collection, that's just a wrapper over Vec<T>
;
// Let's give it some methods so we can create one and add things
// to it.
// since MyCollection has a list of i32s, we implement Extend for i32
let mut c = new;
c.add;
c.add;
c.add;
// let's extend our collection with three more numbers
c.extend;
// we've added these elements onto the end
assert_eq!;
Required Methods
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T)Extends a collection with the contents of an iterator.
As this is the only required method for this trait, the trait-level docs contain more details.
Examples
// You can extend a String with some chars: let mut message = Stringfrom; message.extend; assert_eq!;
Provided Methods
fn extend_one(&mut self, item: A)Extends a collection with exactly one element.
fn extend_reserve(&mut self, additional: usize)Reserves capacity in a collection for the given number of additional elements.
The default implementation does nothing.
unsafe fn extend_one_unchecked(&mut self, item: A) where Self: Sized,Extends a collection with one element, without checking there is enough capacity for it.
Safety
For callers: This must only be called when we know the collection has enough capacity to contain the new item, for example because we previously called
extend_reserve.For implementors: For a collection to unsafely rely on this method's safety precondition (that is, invoke UB if they are violated), it must implement
extend_reservecorrectly. In other words, callers may assume that if theyextend_reserveed enough space they can call this method.
Implementors
impl Extend<()> for ()impl<A, B, C, D, E, ExA, ExB, ExC, ExD, ExE> Extend<(A, B, C, D, E)> for (ExA, ExB, ExC, ExD, ExE) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>,impl<A, B, C, D, E, F, ExA, ExB, ExC, ExD, ExE, ExF> Extend<(A, B, C, D, E, F)> for (ExA, ExB, ExC, ExD, ExE, ExF) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>,impl<A, B, C, D, E, F, G, ExA, ExB, ExC, ExD, ExE, ExF, ExG> Extend<(A, B, C, D, E, F, G)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>,impl<A, B, C, D, E, F, G, H, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH> Extend<(A, B, C, D, E, F, G, H)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>,impl<A, B, C, D, E, F, G, H, I, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI> Extend<(A, B, C, D, E, F, G, H, I)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>, ExI: Extend<I>,impl<A, B, C, D, E, F, G, H, I, J, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ> Extend<(A, B, C, D, E, F, G, H, I, J)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>, ExI: Extend<I>, ExJ: Extend<J>,impl<A, B, C, D, E, F, G, H, I, J, K, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK> Extend<(A, B, C, D, E, F, G, H, I, J, K)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>, ExI: Extend<I>, ExJ: Extend<J>, ExK: Extend<K>,impl<A, B, C, D, E, F, G, H, I, J, K, L, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK, ExL> Extend<(A, B, C, D, E, F, G, H, I, J, K, L)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK, ExL) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>, ExI: Extend<I>, ExJ: Extend<J>, ExK: Extend<K>, ExL: Extend<L>,impl<A, B, C, D, ExA, ExB, ExC, ExD> Extend<(A, B, C, D)> for (ExA, ExB, ExC, ExD) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>,impl<A, B, C, ExA, ExB, ExC> Extend<(A, B, C)> for (ExA, ExB, ExC) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>,impl<A, B, ExA, ExB> Extend<(A, B)> for (ExA, ExB) where ExA: Extend<A>, ExB: Extend<B>,impl<T, ExtendT> Extend<(T,)> for (ExtendT,) where ExtendT: Extend<T>,