unobtanium_segmenter/chain/
augmenter.rs

1use crate::augmentation::Augmenter;
2use crate::SegmentedToken;
3
4/// Allows easily applying an [Augmenter] to an iterator of tokens.
5///
6/// It can be used for [augmentation][crate::augmentation] and [normalization][crate::normalization] processing steps.
7///
8/// It can be used on any iterator that has [SegmentedToken] as its `item`.
9pub trait ChainAugmenter<'a, A: Augmenter> {
10	/// Process the iterator using an augmenter or normlizer
11	fn chain_augmenter(self, augmenter: &A) -> impl Iterator<Item = SegmentedToken<'a>>;
12
13	/// Process the iterator using an owned augmenter or normlizer
14	fn chain_owned_augmenter(self, augmenter: A) -> impl Iterator<Item = SegmentedToken<'a>>;
15
16}
17
18impl<'a, A: Augmenter + 'a, I: Iterator<Item = SegmentedToken<'a>>> ChainAugmenter<'a, A> for I
19where
20	Self: 'a,
21{
22	fn chain_augmenter(self, augmenter: &A) -> impl Iterator<Item = SegmentedToken<'a>> {
23		return self.map(|t| augmenter.augment(t));
24	}
25
26	fn chain_owned_augmenter(self, augmenter: A) -> impl Iterator<Item = SegmentedToken<'a>> {
27		return self.map(move |t| augmenter.augment(t));
28	}
29
30}