unobtanium_segmenter/augmentation/
augmenter.rs

1use std::vec::IntoIter;
2
3use crate::segmentation::Segmenter;
4use crate::SegmentedToken;
5use crate::UseOrSubdivide;
6
7/// Simplified Interface that assumes one token in, one token out.
8///
9/// Usable for augmentation and normalization.
10pub trait Augmenter {
11	/// Apply augmentation function to the given token and return it.
12	fn augment<'a>(&self, token: SegmentedToken<'a>) -> SegmentedToken<'a>;
13}
14
15impl<T> Segmenter for T
16where
17	T: Augmenter,
18{
19	type SubdivisionIter<'a> = IntoIter<SegmentedToken<'a>>;
20
21	fn subdivide<'a>(
22		&self,
23		token: SegmentedToken<'a>,
24	) -> UseOrSubdivide<SegmentedToken<'a>, Self::SubdivisionIter<'a>> {
25		return UseOrSubdivide::Use(self.augment(token));
26	}
27}