use crate::structure::locator::LocatorList;
use crate::structure::topic_kind;
use speedy::{Readable, Writable};
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, PartialEq, Eq, Readable, Writable, Serialize, Deserialize)]
pub struct ReliabilityKind(u32);
impl ReliabilityKind {
pub const BEST_EFFORT: ReliabilityKind = ReliabilityKind(1);
pub const RELIABLE: ReliabilityKind = ReliabilityKind(2);
}
#[derive(Debug, PartialEq)]
pub struct EndpointAttributes {
pub topic_kind: topic_kind::TopicKind,
pub reliability_level: ReliabilityKind,
pub unicast_locator_list: LocatorList,
pub multicast_locator_list: LocatorList,
}
impl EndpointAttributes {
fn new() -> EndpointAttributes {
EndpointAttributes {
topic_kind: topic_kind::TopicKind::NoKey,
reliability_level: ReliabilityKind::BEST_EFFORT,
unicast_locator_list: LocatorList::new(),
multicast_locator_list: LocatorList::new(),
}
}
}
impl Default for EndpointAttributes {
fn default() -> EndpointAttributes {
EndpointAttributes::new()
}
}
pub trait Endpoint {
fn as_endpoint(&self) -> &EndpointAttributes;
}
#[cfg(test)]
mod tests {
use super::*;
serialization_test!( type = ReliabilityKind,
{
reliability_kind_best_effort,
ReliabilityKind::BEST_EFFORT,
le = [0x01, 0x00, 0x00, 0x00],
be = [0x00, 0x00, 0x00, 0x01]
},
{
reliability_kind_reliable,
ReliabilityKind::RELIABLE,
le = [0x02, 0x00, 0x00, 0x00],
be = [0x00, 0x00, 0x00, 0x02]
});
}