rsmorphy 0.4.0

Morphological analyzer / inflection engine for Russian and Ukrainian (soon) languages (WIP)
use std::iter::FromIterator;

#[derive(Debug, PartialEq, Clone, Copy)]
pub struct ParadigmEntry {
    pub prefix_id: u16,
    pub tag_id: u16,
    pub suffix_id: u16,
}

impl ParadigmEntry {
    pub fn build<P: AsRef<[u16]>>(paradigm: P) -> Vec<Self> {
        let paradigm = paradigm.as_ref();
        assert_eq!(0, paradigm.len() % 3, "Wrong paradigm length");
        let paradigm_len = paradigm.len() / 3;
        Vec::from_iter((0..paradigm_len).map(|idx| ParadigmEntry {
            suffix_id: paradigm[idx],
            tag_id: paradigm[paradigm_len + idx],
            prefix_id: paradigm[paradigm_len * 2 + idx],
        }))
    }
}