unobtanium_segmenter/augmentation/
augmenter.rs

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