#![doc(html_root_url = "https://docs.rs/frayed/0.1.0")]
#![doc = include_str!("../README.md")]
pub mod fraught;
pub mod defray;
pub use defray::Defray;
use fraught::prefix::Prefix;
pub trait Frayed: Iterator {}
pub struct FrayedIter<I: Iterator> {
pub unfused: I,
}
pub trait FrayedTools: Frayed {
fn defray(self) -> Defray<Self>
where
Self: Sized,
{
Defray::new(self)
}
}
impl<T> FrayedTools for T where T: Frayed + ?Sized {}
pub trait FraughtTools: Iterator {
fn prefix<I>(self, postfixes: I) -> Prefix<Self, I>
where
I: Frayed<Item = Self::Item>,
Self: Sized + Clone,
{
Prefix::new(self, postfixes)
}
fn frayed(self) -> FrayedIter<Self>
where
Self: Sized,
{
FrayedIter { unfused: self }
}
}
impl<T> FraughtTools for T where T: Iterator + ?Sized {}
impl<I: Iterator> Iterator for FrayedIter<I> {
type Item = I::Item;
#[inline(always)]
fn next(&mut self) -> Option<Self::Item> {
self.unfused.next()
}
}
impl<I: Iterator> Frayed for FrayedIter<I> {}