helix-im 0.1.19

基于 Helix Core 的确定性 MessageV3 IM 业务模块
Documentation
use helix_core::EffectSink;

use crate::error::ImError;

use super::super::{ImWsContext, WsFrame, WsHandlerRegistration, WsMessageHandler};

const STATUS_CHANGE_ACTION: &str = "status_change";
const MULTIPLE_CHANNELS_VIEWED_ACTION: &str = "multiple_channels_viewed";
const TYPING_ACTION: &str = "typing";
const PRESENCE_ACTION: &str = "presence";

struct IgnoredHandler {
    action: &'static str,
}

impl WsMessageHandler for IgnoredHandler {
    fn action(&self) -> &'static str {
        self.action
    }

    fn handle(
        &self,
        _ctx: &mut ImWsContext<'_>,
        _frame: &WsFrame,
        _out: &mut EffectSink,
    ) -> Result<(), ImError> {
        Ok(())
    }
}

static STATUS_CHANGE_HANDLER: IgnoredHandler = IgnoredHandler {
    action: STATUS_CHANGE_ACTION,
};
static MULTIPLE_CHANNELS_VIEWED_HANDLER: IgnoredHandler = IgnoredHandler {
    action: MULTIPLE_CHANNELS_VIEWED_ACTION,
};
static TYPING_HANDLER: IgnoredHandler = IgnoredHandler {
    action: TYPING_ACTION,
};
static PRESENCE_HANDLER: IgnoredHandler = IgnoredHandler {
    action: PRESENCE_ACTION,
};
#[cfg(target_arch = "wasm32")]
pub(super) fn inventory_link_anchor() {
    std::hint::black_box((
        &STATUS_CHANGE_HANDLER,
        &MULTIPLE_CHANNELS_VIEWED_HANDLER,
        &TYPING_HANDLER,
        &PRESENCE_HANDLER,
    ));
}

inventory::submit! {
    WsHandlerRegistration {
        action: STATUS_CHANGE_ACTION,
        handler: &STATUS_CHANGE_HANDLER,
    }
}

inventory::submit! {
    WsHandlerRegistration {
        action: MULTIPLE_CHANNELS_VIEWED_ACTION,
        handler: &MULTIPLE_CHANNELS_VIEWED_HANDLER,
    }
}

inventory::submit! {
    WsHandlerRegistration {
        action: TYPING_ACTION,
        handler: &TYPING_HANDLER,
    }
}

inventory::submit! {
    WsHandlerRegistration {
        action: PRESENCE_ACTION,
        handler: &PRESENCE_HANDLER,
    }
}