use crate::SegmentedToken;
use crate::SubdivisionMap;
use crate::segmentation::Segmenter;
pub trait ChainSegmenter<'a, S: Segmenter>
where
Self: 'a,
{
fn chain_segmenter(self, segmenter: &S) -> impl Iterator<Item = SegmentedToken<'a>>;
fn chain_owned_segmenter(self, segmenter: S) -> impl Iterator<Item = SegmentedToken<'a>>;
}
impl<'a, S: Segmenter + 'a, I: Iterator<Item = SegmentedToken<'a>>> ChainSegmenter<'a, S> for I
where
Self: 'a,
{
fn chain_segmenter(self, segmenter: &S) -> impl Iterator<Item = SegmentedToken<'a>> {
return SubdivisionMap::new(self, |t| segmenter.subdivide(t));
}
fn chain_owned_segmenter(self, segmenter: S) -> impl Iterator<Item = SegmentedToken<'a>> {
return SubdivisionMap::new(self, move |t| segmenter.subdivide(t));
}
}