use std::fmt;
use super::{RoleName, TopologyConstraint, TopologyParseError};
#[derive(Debug, Clone)]
pub enum TopologyLoadError {
IoError(String),
ParseError(TopologyParseError),
}
impl std::fmt::Display for TopologyLoadError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
TopologyLoadError::IoError(e) => write!(f, "IO error: {}", e),
TopologyLoadError::ParseError(e) => write!(f, "Parse error: {}", e),
}
}
}
impl std::error::Error for TopologyLoadError {}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TopologyValidation {
Valid,
UnknownRole(RoleName),
MissingRole(RoleName),
ConstraintViolation(TopologyConstraint, String),
InsufficientCapacity {
sender: RoleName,
receiver: RoleName,
required_bits: u32,
available_bits: u32,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TopologyError {
UnknownRole(RoleName),
}
impl fmt::Display for TopologyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TopologyError::UnknownRole(role) => write!(f, "unknown role: {}", role),
}
}
}
impl std::error::Error for TopologyError {}
impl TopologyValidation {
pub fn is_valid(&self) -> bool {
matches!(self, TopologyValidation::Valid)
}
}