veil-engine 0.2.1

Detection, placeholders and restoration. No I/O.
Documentation
use std::sync::LazyLock;

use regex::Regex;

use super::{builtin, Candidate, Detector, P_EMAIL};
use crate::kind::kinds::EMAIL;

static PATTERN: LazyLock<Regex> = LazyLock::new(|| {
    Regex::new(
        r"(?i)\b[a-z0-9._%+-]+@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\.[a-z]{2,24}\b",
    )
    .expect("valid email regex")
});

pub(super) struct Email;

impl Detector for Email {
    fn find(&self, text: &str, out: &mut Vec<Candidate>) {
        for m in PATTERN.find_iter(text) {
            out.push(builtin(m.start(), m.end(), EMAIL, P_EMAIL));
        }
    }
}