unobtanium_segmenter/chain/
segmenter.rs1use crate::segmentation::Segmenter;
2use crate::SegmentedToken;
3use crate::SubdivisionMap;
4
5pub trait ChainSegmenter<'a, S: Segmenter>
11where
12 Self: 'a,
13{
14 fn chain_segmenter(self, segmenter: &S) -> impl Iterator<Item = SegmentedToken<'a>>;
16
17 fn chain_owned_segmenter(self, segmenter: S) -> impl Iterator<Item = SegmentedToken<'a>>;
19
20}
21
22impl<'a, S: Segmenter + 'a, I: Iterator<Item = SegmentedToken<'a>>> ChainSegmenter<'a, S> for I
23where
24 Self: 'a,
25{
26 fn chain_segmenter(self, segmenter: &S) -> impl Iterator<Item = SegmentedToken<'a>> {
27 return SubdivisionMap::new(self, |t| segmenter.subdivide(t));
28 }
29
30 fn chain_owned_segmenter(self, segmenter: S) -> impl Iterator<Item = SegmentedToken<'a>> {
31 return SubdivisionMap::new(self, move |t| segmenter.subdivide(t));
32 }
33
34}