rustfst/algorithms/tr_mappers/
input_epsilon_mapper.rs

1use anyhow::Result;
2
3use crate::algorithms::{FinalTr, MapFinalAction, TrMapper, WeightConverter};
4use crate::fst_properties::FstProperties;
5use crate::semirings::Semiring;
6use crate::Tr;
7use crate::EPS_LABEL;
8
9/// Mapper that converts all input symbols to epsilon.
10pub struct InputEpsilonMapper {}
11
12impl<S: Semiring> TrMapper<S> for InputEpsilonMapper {
13    fn tr_map(&self, tr: &mut Tr<S>) -> Result<()> {
14        tr.ilabel = EPS_LABEL;
15        Ok(())
16    }
17
18    fn final_tr_map(&self, _final_tr: &mut FinalTr<S>) -> Result<()> {
19        Ok(())
20    }
21
22    fn final_action(&self) -> MapFinalAction {
23        MapFinalAction::MapNoSuperfinal
24    }
25
26    fn properties(&self, inprops: FstProperties) -> FstProperties {
27        (inprops & FstProperties::set_arc_properties())
28            | FstProperties::I_EPSILONS
29            | FstProperties::I_LABEL_SORTED
30    }
31}
32
33tr_mapper_to_weight_convert_mapper!(InputEpsilonMapper);