use core::borrow::Borrow;
use core::ops::Deref;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
#[repr(transparent)]
pub struct Iter<I> {
encodable_iter: I,
}
impl<I> Iter<I> {
#[inline]
#[must_use]
pub const fn new(encodable_iter: I) -> Self {
Self { encodable_iter }
}
#[inline]
#[must_use]
pub fn into_inner(self) -> I {
self.encodable_iter
}
}
impl<I> AsRef<I> for Iter<I> {
#[inline]
fn as_ref(&self) -> &I {
&self.encodable_iter
}
}
impl<I> Borrow<I> for Iter<I> {
#[inline]
fn borrow(&self) -> &I {
&self.encodable_iter
}
}
impl<I> Deref for Iter<I> {
type Target = I;
#[inline]
fn deref(&self) -> &Self::Target {
&self.encodable_iter
}
}
impl<EncodableIter, Encoder> crate::Encodable<Encoder> for Iter<EncodableIter>
where
EncodableIter: IntoIterator + Clone,
EncodableIter::Item: crate::Encodable<Encoder>,
Encoder: crate::BaseEncoder,
{
type Error = <EncodableIter::Item as crate::Encodable<Encoder>>::Error;
#[inline]
fn encode(&self, encoder: &mut Encoder) -> Result<(), Self::Error> {
for encodable in self.encodable_iter.clone() {
encodable.encode(encoder)?;
}
Ok(())
}
}