use crate::SegmentedToken;
use crate::augmentation::Augmenter;
pub trait ChainAugmenter<'a, A: Augmenter> {
fn chain_augmenter(self, augmenter: &A) -> impl Iterator<Item = SegmentedToken<'a>>;
fn chain_owned_augmenter(self, augmenter: A) -> impl Iterator<Item = SegmentedToken<'a>>;
}
impl<'a, A: Augmenter + 'a, I: Iterator<Item = SegmentedToken<'a>>> ChainAugmenter<'a, A> for I
where
Self: 'a,
{
fn chain_augmenter(self, augmenter: &A) -> impl Iterator<Item = SegmentedToken<'a>> {
return self.map(|t| augmenter.augment(t));
}
fn chain_owned_augmenter(self, augmenter: A) -> impl Iterator<Item = SegmentedToken<'a>> {
return self.map(move |t| augmenter.augment(t));
}
}