yuru 0.1.8

A fast phonetic fuzzy finder for the shell
use anyhow::{bail, Result};
use yuru_core::{dedup_and_limit_keys, SearchConfig, SearchKey};

use crate::fields::InputItem;

pub(crate) fn apply_aliases(
    candidates: &mut [yuru_core::Candidate],
    items: &[InputItem],
    aliases: &[String],
    config: &SearchConfig,
) -> Result<()> {
    for alias in aliases {
        let Some((query, display)) = alias.split_once('=') else {
            bail!("alias must use query=display format: {alias}");
        };
        if let Some(candidate) = candidates.iter_mut().find(|candidate| {
            let item = &items[candidate.id];
            item.original == display || item.display == display || candidate.display == display
        }) {
            candidate.keys.push(SearchKey::learned_alias(query));
            candidate.keys = dedup_and_limit_keys(std::mem::take(&mut candidate.keys), config);
        }
    }
    Ok(())
}

pub(crate) fn apply_aliases_to_candidate(
    candidate: &mut yuru_core::Candidate,
    item: &InputItem,
    aliases: &[String],
    config: &SearchConfig,
) -> Result<()> {
    for alias in aliases {
        let Some((query, display)) = alias.split_once('=') else {
            bail!("alias must use query=display format: {alias}");
        };
        if item.original == display || item.display == display || candidate.display == display {
            candidate.keys.push(SearchKey::learned_alias(query));
        }
    }
    candidate.keys = dedup_and_limit_keys(std::mem::take(&mut candidate.keys), config);
    Ok(())
}