unobtanium_segmenter/chain/
segmenter.rs1use crate::SegmentedToken;
6use crate::SubdivisionMap;
7use crate::segmentation::Segmenter;
8
9pub trait ChainSegmenter<'a, S: Segmenter>
15where
16 Self: 'a,
17{
18 fn chain_segmenter(self, segmenter: &S) -> impl Iterator<Item = SegmentedToken<'a>>;
20
21 fn chain_owned_segmenter(self, segmenter: S) -> impl Iterator<Item = SegmentedToken<'a>>;
23}
24
25impl<'a, S: Segmenter + 'a, I: Iterator<Item = SegmentedToken<'a>>> ChainSegmenter<'a, S> for I
26where
27 Self: 'a,
28{
29 fn chain_segmenter(self, segmenter: &S) -> impl Iterator<Item = SegmentedToken<'a>> {
30 return SubdivisionMap::new(self, |t| segmenter.subdivide(t));
31 }
32
33 fn chain_owned_segmenter(self, segmenter: S) -> impl Iterator<Item = SegmentedToken<'a>> {
34 return SubdivisionMap::new(self, move |t| segmenter.subdivide(t));
35 }
36}