pub type NumEdits = u8;
pub type Distance = u16;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct FuzzyLimits {
insertions: Option<NumEdits>,
deletions: Option<NumEdits>,
substitutions: Option<NumEdits>,
swaps: Option<NumEdits>,
edits: Option<NumEdits>,
}
impl FuzzyLimits {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn insertions(mut self, num: NumEdits) -> Self {
self.insertions = Some(num);
self
}
#[must_use]
pub fn deletions(mut self, num: NumEdits) -> Self {
self.deletions = Some(num);
self
}
#[must_use]
pub fn substitutions(mut self, num: NumEdits) -> Self {
self.substitutions = Some(num);
self
}
#[must_use]
pub fn swaps(mut self, num: NumEdits) -> Self {
self.swaps = Some(num);
self
}
#[must_use]
pub fn edits(mut self, num: NumEdits) -> Self {
self.edits = Some(num);
self
}
#[must_use]
pub fn get_edits(&self) -> Option<NumEdits> {
self.edits
}
#[must_use]
pub fn get_insertions(&self) -> Option<NumEdits> {
self.insertions
}
#[must_use]
pub fn get_deletions(&self) -> Option<NumEdits> {
self.deletions
}
#[must_use]
pub fn get_substitutions(&self) -> Option<NumEdits> {
self.substitutions
}
#[must_use]
pub fn get_swaps(&self) -> Option<NumEdits> {
self.swaps
}
}
#[derive(Debug, Clone)]
pub struct FuzzyPenalties {
pub insertion: f32,
pub deletion: f32,
pub substitution: f32,
pub swap: f32,
}
impl Default for FuzzyPenalties {
fn default() -> Self {
let m = 1.3;
Self {
substitution: 1.1 * m,
insertion: 0.4 * m,
deletion: 0.7 * m,
swap: 0.4 * m,
}
}
}
impl FuzzyPenalties {
#[must_use]
pub fn insertion(mut self, penalty: f32) -> Self {
self.insertion = penalty;
self
}
#[must_use]
pub fn deletion(mut self, penalty: f32) -> Self {
self.deletion = penalty;
self
}
#[must_use]
pub fn substitution(mut self, penalty: f32) -> Self {
self.substitution = penalty;
self
}
#[must_use]
pub fn swap(mut self, penalty: f32) -> Self {
self.swap = penalty;
self
}
}