cortexfs_channels/
adapter.rs1use std::future::Future;
2use std::pin::Pin;
3
4use futures_core::Stream;
5
6use crate::{
7 ChannelCapabilities, ChannelError, ChannelHealth, ChannelId, InboundMessage, OutboundMessage,
8};
9
10pub type ChannelStream = Pin<Box<dyn Stream<Item = Result<InboundMessage, ChannelError>> + Send>>;
12
13pub type ChannelFuture<'a, T> = Pin<Box<dyn Future<Output = Result<T, ChannelError>> + Send + 'a>>;
15
16#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
18pub struct DeliveryReceipt {
19 pub channel: ChannelId,
20 pub message_id: String,
21 pub target: crate::MessageTarget,
22 pub timestamp_ms: Option<u64>,
23}
24
25pub trait ChannelAdapter: Send + Sync {
27 fn id(&self) -> ChannelId;
28 fn capabilities(&self) -> ChannelCapabilities;
29 fn listen(&self) -> Result<ChannelStream, ChannelError>;
30 fn send(&self, message: OutboundMessage) -> ChannelFuture<'_, DeliveryReceipt>;
31 fn health(&self) -> ChannelFuture<'_, ChannelHealth> {
32 Box::pin(async { Ok(ChannelHealth::ready()) })
33 }
34}