use std::error::Error;
use std::fmt;
use std::fmt::Formatter;
use crate::{arc, PlaceId, TransitionId};
#[derive(Debug)]
pub enum NetError {
CyclicPriorities,
InvalidTimeRange,
UnsupportedArc(arc::Kind),
InvalidTransition(TransitionId),
InvalidPlace(PlaceId),
DuplicatedName(String),
UnknownIdentifier(String),
InvalidArc,
}
impl fmt::Display for NetError {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
NetError::CyclicPriorities => write!(f, "Cyclic priorities in Petri net"),
NetError::InvalidTimeRange => write!(f, "Invalid time range found"),
NetError::UnsupportedArc(arc) => {
write!(f, "Unsupported arc {}", arc)
}
NetError::InvalidTransition(tr) => write!(f, "Invalid transition id {}", tr),
NetError::InvalidPlace(pl) => write!(f, "Invalid place id {}", pl),
NetError::DuplicatedName(name) => write!(
f,
"You try to create duplicated name in the network: {}",
name
),
NetError::UnknownIdentifier(identifier) => {
write!(f, "Identifier {} not found in the network.", identifier)
}
NetError::InvalidArc => {
write!(f, "Invalid arc in the network")
}
}
}
}
impl Error for NetError {}