use std::error::Error;
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum QuorumTreeError {
DuplicateChild {
canonical_id: String,
},
UnsatisfiableQuorum {
quorum_size: u64,
num_children: usize,
},
}
impl fmt::Display for QuorumTreeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::DuplicateChild { canonical_id } => {
write!(f, "duplicate child node: {canonical_id}")
}
Self::UnsatisfiableQuorum {
quorum_size,
num_children,
} => {
write!(
f,
"quorum size {quorum_size} exceeds the number of child nodes {num_children}"
)
}
}
}
}
impl Error for QuorumTreeError {}
#[cfg(test)]
mod tests {
use super::QuorumTreeError;
#[test]
fn test_display() {
let err = QuorumTreeError::DuplicateChild {
canonical_id: "Id=1".to_string(),
};
assert_eq!("duplicate child node: Id=1", err.to_string());
let err = QuorumTreeError::UnsatisfiableQuorum {
quorum_size: 3,
num_children: 2,
};
assert_eq!(
"quorum size 3 exceeds the number of child nodes 2",
err.to_string()
);
}
}