infrarust 1.2.0

A Rust universal Minecraft proxy
Documentation
use crate::FilterError;
use crate::{FilterRegistry, security::BanSystemAdapter, with_filter_or};
use std::sync::Arc;

pub struct BanHelper;

impl BanHelper {
    pub async fn is_username_banned(
        registry: &Arc<FilterRegistry>,
        username: &str,
    ) -> Option<String> {
        let is_banned = matches!(
            with_filter_or!(
                registry,
                "global_ban_system",
                BanSystemAdapter,
                async |filter: &BanSystemAdapter| { filter.is_username_banned(username).await },
                false
            ),
            Ok(true)
        );

        if is_banned {
            if let Ok(reason) = with_filter_or!(
                registry,
                "global_ban_system",
                BanSystemAdapter,
                async |filter: &BanSystemAdapter| {
                    filter.get_ban_reason_for_username(username).await
                },
                None
            ) {
                return reason;
            }
        }
        None
    }
}