rust/chat_sanitizer/src/letter_repeat.rs
author sheepluva
Tue, 22 Jun 2021 22:13:55 +0200
changeset 15802 d5c37e78ab83
parent 14505 ba29aa03db87
permissions -rw-r--r--
hedgewars-engine (rust): fix "protocol_version" -> "hedgewars_engine_protocol_version" That function/symbol was renamed in ef2fc0210362

use crate::{MessageChecker, Severity};

use itertools::Itertools;
use std::marker::PhantomData;

struct LetterRepeatChecker<T> {
    threshold: usize,
    player_id_type: PhantomData<T>,
}

impl<T> LetterRepeatChecker<T> {
    pub fn new(threshold: usize) -> Self {
        Self {
            threshold,
            player_id_type: PhantomData,
        }
    }
}

impl<T> MessageChecker<T> for LetterRepeatChecker<T> {
    fn check(&self, _player_id: T, message: &str) -> Severity {
        for (_key, group) in &message.chars().into_iter().group_by(|c| *c) {
            if group.count() >= self.threshold {
                return Severity::Warn;
            }
        }

        Severity::Pass
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn it_works() {
        let checker = LetterRepeatChecker::new(3);
        assert_eq!(checker.check(0, "Hello world!"), Severity::Pass);
        assert_eq!(checker.check(0, "ooops"), Severity::Warn);
        assert_eq!(
            checker.check(0, "жираф - длинношеее животное"),
            Severity::Warn
        );
    }
}