use super::{Trailer, TrailerKey, TrailerValue};
pub struct PairsToTrailers<K, I>
where K: Into<TrailerKey>,
I: Iterator<Item = (K, TrailerValue)>
{
inner: I
}
impl<K, I, J> From<J> for PairsToTrailers<K, I>
where K: Into<TrailerKey>,
I: Iterator<Item = (K, TrailerValue)>,
J: IntoIterator<Item = (K, TrailerValue), IntoIter = I>
{
fn from(iter: J) -> Self {
PairsToTrailers { inner: iter.into_iter() }
}
}
impl<K, I> Iterator for PairsToTrailers<K, I>
where K: Into<TrailerKey>,
I: Iterator<Item = (K, TrailerValue)>
{
type Item = Trailer;
fn next(&mut self) -> Option<Self::Item> {
self.inner
.next()
.map(|(k, v)| Trailer { key: k.into(), value: v })
}
}
pub struct DitTrailers<I>(I)
where I: Iterator<Item = Trailer>;
impl<I> From<I> for DitTrailers<I>
where I: Iterator<Item = Trailer>
{
fn from(inner: I) -> Self {
DitTrailers(inner)
}
}
impl<I> Iterator for DitTrailers<I>
where I: Iterator<Item = Trailer>
{
type Item = Trailer;
fn next(&mut self) -> Option<Self::Item> {
loop {
match self.0.next() {
None => return None,
Some(trailer) => {
if trailer.key.0.starts_with("Dit") {
return Some(trailer);
} else {
continue;
}
}
}
}
}
}