use crate::protocol::dds::error::RtpsError;
use crate::protocol::dds::transport::TransportError;
#[derive(Debug)]
pub enum DiscoveryError {
Transport(TransportError),
Parse(RtpsError),
PayloadTooSmall,
MissingField(&'static str),
}
impl core::fmt::Display for DiscoveryError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::Transport(e) => write!(f, "discovery transport error: {e}"),
Self::Parse(e) => write!(f, "discovery parse error: {e}"),
Self::PayloadTooSmall => {
write!(f, "discovery: CDR payload too small (< 4 bytes)")
}
Self::MissingField(name) => {
write!(
f,
"discovery: required field '{name}' missing from ParameterList"
)
}
}
}
}
impl std::error::Error for DiscoveryError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Transport(e) => Some(e),
_ => None,
}
}
}
impl From<TransportError> for DiscoveryError {
fn from(e: TransportError) -> Self {
Self::Transport(e)
}
}
impl From<RtpsError> for DiscoveryError {
fn from(e: RtpsError) -> Self {
Self::Parse(e)
}
}