rustfst_ffi/algorithms/
rm_epsilon.rs1use anyhow::anyhow;
2
3use crate::fst::CFst;
4use crate::{get_mut, wrap, RUSTFST_FFI_RESULT};
5
6use rustfst::algorithms::rm_epsilon::rm_epsilon;
7use rustfst::fst_impls::VectorFst;
8use rustfst::semirings::TropicalWeight;
9
10#[no_mangle]
14pub unsafe extern "C" fn fst_rm_epsilon(ptr: *mut CFst) -> RUSTFST_FFI_RESULT {
15 wrap(|| {
16 let fst = get_mut!(CFst, ptr);
17 let vec_fst: &mut VectorFst<TropicalWeight> = fst
18 .downcast_mut()
19 .ok_or_else(|| anyhow!("Could not downcast to vector FST"))?;
20 rm_epsilon(vec_fst)?;
21 Ok(())
22 })
23}