tauri-plugin-indexer 0.1.1

a custom indexer (if the version is 1.0.0 then the plugin is ready)
Documentation

use std::cmp::min;
pub fn get_word_half(word: &str) -> String {
    let len = word.chars().count();
    let half_len = min((len + 1) / 2, 2);
    word.chars().take(half_len).collect()
}
pub fn is_valid_word(word: &str) -> bool {
    let len = word.len();
    if !(2..=30).contains(&len) {
        return false; // discard extremely short or long words
    }

    if !word.chars().all(|c| c.is_ascii_alphanumeric()) {
        return false; // must be alphanumeric
    }

    if !word.chars().any(|c| c.is_ascii_alphabetic()) {
        return false; // must have at least one letter
    }

    // Reject words with repeated characters (e.g., "aaaaaa", "abcabcabc")
    let mut repeat_count = 1;
    let mut last_char = '\0';
    for c in word.chars() {
        if c == last_char {
            repeat_count += 1;
            if repeat_count >= 4 {
                return false;
            }
        } else {
            repeat_count = 1;
        }
        last_char = c;
    }

    // Reject if it's made of a small substring repeated (e.g., "abcabcabc", "ababab")
    let max_pattern_len = len / 2;
    for pat_len in 1..=max_pattern_len {
        if len % pat_len == 0 {
            let pattern = &word[..pat_len];
            if word == pattern.repeat(len / pat_len) {
                return false;
            }
        }
    }

    // Reject if contains too many digits (likely a code or random string)
    let digit_ratio = word.chars().filter(|c| c.is_ascii_digit()).count() as f32 / len as f32;
    if digit_ratio > 0.5 {
        return false;
    }

    true
}