mod filter;
mod iter;
mod map;
mod swap;
#[cfg(any(test, doctest))]
mod tests;
use core::iter::Iterator;
#[doc(hidden)]
pub use self::{
filter::{FilterKeys, FilterValues},
map::{MapKeys, MapValues},
swap::Swap,
};
pub trait IterMap<I, K, V>: Sized {
fn map_keys<Fk, L>(self, f: Fk) -> MapKeys<I, Fk>
where
Fk: FnMut(K) -> L;
fn map_values<Fv, W>(self, f: Fv) -> MapValues<I, Fv>
where
Fv: FnMut(V) -> W;
fn filter_keys<Fk>(self, key_op: Fk) -> FilterKeys<I, Fk>
where
Fk: FnMut(&K) -> bool;
fn filter_values<Fv>(self, value_op: Fv) -> FilterValues<I, Fv>
where
Fv: FnMut(&V) -> bool;
fn swap(self) -> Swap<Self>;
}
impl<I, K, V> IterMap<I, K, V> for I
where
I: Iterator<Item = (K, V)>,
{
fn map_keys<Fk, L>(self, key_op: Fk) -> MapKeys<I, Fk>
where
Fk: FnMut(K) -> L,
{
MapKeys::new(self, key_op)
}
fn map_values<Fv, W>(self, value_op: Fv) -> MapValues<I, Fv>
where
Fv: FnMut(V) -> W,
{
MapValues::new(self, value_op)
}
fn filter_keys<Fk>(self, key_op: Fk) -> FilterKeys<I, Fk>
where
Fk: FnMut(&K) -> bool,
{
FilterKeys::new(self, key_op)
}
fn filter_values<Fv>(self, value_op: Fv) -> FilterValues<I, Fv>
where
Fv: FnMut(&V) -> bool,
{
FilterValues::new(self, value_op)
}
fn swap(self) -> Swap<Self> {
Swap::new(self)
}
}