rabbitmq_stream_client/client/
handler.rs

1use 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}