use crate::core::{ChannelId, Result};
use crate::reliability::{MessageFragment, MessageKey, MessageStatus};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct DeliveredMessage<'a> {
pub channel_id: ChannelId,
pub key: MessageKey,
pub bytes: &'a [u8],
}
impl<'a> DeliveredMessage<'a> {
#[must_use]
pub const fn new(channel_id: ChannelId, key: MessageKey, bytes: &'a [u8]) -> Self {
Self {
channel_id,
key,
bytes,
}
}
#[must_use]
pub const fn len(self) -> usize {
self.bytes.len()
}
#[must_use]
pub const fn is_empty(self) -> bool {
self.bytes.is_empty()
}
}
pub trait MessageDelivery {
fn deliver(&mut self, message: DeliveredMessage<'_>) -> Result<()>;
}
pub trait Reassembly {
fn observe_fragment(&mut self, fragment: MessageFragment) -> Result<MessageStatus>;
fn status_of(&self, key: MessageKey) -> MessageStatus;
}