rabbitmq_stream_client/client/
handler.rs1use crate::{error::ClientError, RabbitMQStreamResult};
2use rabbitmq_stream_protocol::Response;
3use std::future::Future;
4
5pub type MessageResult = Option<Result<Response, ClientError>>;
6
7#[async_trait::async_trait]
8pub trait MessageHandler: Send + Sync + 'static {
9 async fn handle_message(&self, item: MessageResult) -> RabbitMQStreamResult<()>;
10}
11
12#[async_trait::async_trait]
13impl<T, F> MessageHandler for T
14where
15 F: Future<Output = RabbitMQStreamResult<()>> + Send,
16 T: FnOnce(MessageResult) -> F + Send + Sync,
17 T: 'static,
18 T: Clone,
19{
20 async fn handle_message(&self, item: MessageResult) -> RabbitMQStreamResult<()> {
21 let fun = self.clone();
22 fun(item).await
23 }
24}