use crate::channel::ChannelDescriptor;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Reliability {
#[default]
Lossy,
Reliable,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct QosProfile {
pub(crate) reliability: Reliability,
}
impl QosProfile {
pub fn builder() -> QosProfileBuilder {
QosProfileBuilder::default()
}
pub fn reliability(&self) -> Reliability {
self.reliability
}
}
#[derive(Debug, Clone, Default)]
pub struct QosProfileBuilder {
reliability: Reliability,
}
impl QosProfileBuilder {
#[must_use]
pub fn reliability(mut self, reliability: Reliability) -> Self {
self.reliability = reliability;
self
}
pub fn build(self) -> QosProfile {
QosProfile {
reliability: self.reliability,
}
}
}
pub trait QosClassifier: Sync + Send {
fn classify(&self, channel: &ChannelDescriptor) -> QosProfile;
}
pub(crate) struct QosClassifierFn<F>(pub F)
where
F: Fn(&ChannelDescriptor) -> QosProfile + Sync + Send;
impl<F> QosClassifier for QosClassifierFn<F>
where
F: Fn(&ChannelDescriptor) -> QosProfile + Sync + Send,
{
fn classify(&self, channel: &ChannelDescriptor) -> QosProfile {
self.0(channel)
}
}