use core::fmt::{self, Debug};
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub enum InvalidEdgeError {
InvalidSourceIndex,
InvalidDestIndex,
}
impl fmt::Display for InvalidEdgeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
InvalidEdgeError::InvalidSourceIndex => "invalid edge source index",
InvalidEdgeError::InvalidDestIndex => "invalid edge destination index",
})
}
}
#[cfg(feature = "std")]
impl std::error::Error for InvalidEdgeError {}
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub enum AddEdgeError {
InvalidEdge(InvalidEdgeError),
EdgeExists,
}
impl fmt::Display for AddEdgeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
AddEdgeError::InvalidEdge(e) => fmt::Display::fmt(e, f),
AddEdgeError::EdgeExists => f.write_str("edge exists"),
}
}
}
impl From<InvalidEdgeError> for AddEdgeError {
fn from(value: InvalidEdgeError) -> Self {
AddEdgeError::InvalidEdge(value)
}
}
#[cfg(feature = "std")]
impl std::error::Error for AddEdgeError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
AddEdgeError::InvalidEdge(e) => Some(e),
AddEdgeError::EdgeExists => None,
}
}
}
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct NodeExistsError(pub(crate) ());
impl fmt::Display for NodeExistsError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("node exists")
}
}
#[cfg(feature = "std")]
impl std::error::Error for NodeExistsError {}
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
pub struct RemoveNodeError;
impl fmt::Display for RemoveNodeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("node has connected edges and can't be removed")
}
}
#[cfg(feature = "std")]
impl std::error::Error for RemoveNodeError {}