meta_srv/handler/
mailbox_handler.rs1use api::v1::meta::{HeartbeatRequest, Role};
16
17use crate::error::Result;
18use crate::handler::{HandleControl, HeartbeatAccumulator, HeartbeatHandler};
19use crate::metasrv::Context;
20
21pub struct MailboxHandler;
22
23#[async_trait::async_trait]
24impl HeartbeatHandler for MailboxHandler {
25 fn is_acceptable(&self, _role: Role) -> bool {
26 true
27 }
28
29 async fn handle(
30 &self,
31 req: &HeartbeatRequest,
32 ctx: &mut Context,
33 _acc: &mut HeartbeatAccumulator,
34 ) -> Result<HandleControl> {
35 let Some(message) = &req.mailbox_message else {
36 return Ok(HandleControl::Continue);
37 };
38
39 ctx.mailbox.on_recv(message.id, Ok(message.clone())).await?;
40
41 Ok(HandleControl::Done)
42 }
43}