divvunspell 1.0.0-beta.3

Spell checking library for ZHFST/BHFST spellers, with case handling and tokenization support.
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum FlagDiacriticOperator {
    PositiveSet,
    NegativeSet,
    Require,
    Disallow,
    Clear,
    Unification,
}

impl std::str::FromStr for FlagDiacriticOperator {
    type Err = ();

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "P" => Ok(FlagDiacriticOperator::PositiveSet),
            "N" => Ok(FlagDiacriticOperator::NegativeSet),
            "R" => Ok(FlagDiacriticOperator::Require),
            "D" => Ok(FlagDiacriticOperator::Disallow),
            "C" => Ok(FlagDiacriticOperator::Clear),
            "U" => Ok(FlagDiacriticOperator::Unification),
            _ => Err(()),
        }
    }
}

#[derive(Debug)]
pub enum HeaderFlag {
    Weighted,
    Deterministic,
    InputDeterministic,
    Minimized,
    Cyclic,
    HasEpsilonEpsilonTransitions,
    HasInputEpsilonTransitions,
    HasInputEpsilonCycles,
    HasUnweightedInputEpsilonCycles,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct FlagDiacriticOperation {
    pub operation: FlagDiacriticOperator,
    pub feature: SymbolNumber,
    pub value: ValueNumber,
}

pub type SymbolNumber = u16;
pub type ValueNumber = i16;
pub type TransitionTableIndex = u32;
pub type Weight = f32;
pub type FlagDiacriticState = Vec<i16>;
pub type OperationsMap = hashbrown::HashMap<SymbolNumber, FlagDiacriticOperation>;