unobtanium_segmenter/chain/
augmenter.rs

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