use std::{io, net, sync};
use thiserror::Error;
use crate::NodeID;
#[derive(Error, Debug)]
pub enum NCError {
#[error("IP address parse error: {0}")]
IPAddrParse(#[from] net::AddrParseError),
#[error("IO error: {0}")]
IOError(#[from] io::Error),
#[error("Serialize bincode error: {0}")]
Serialize(bincode::Error),
#[error("Deserialize bincode error: {0}")]
Deserialize(bincode::Error),
#[error("Bincode error: {0}")]
Bincode(#[from] Box<bincode::ErrorKind>),
#[error("Server message mismatch error")]
ServerMsgMismatch,
#[error("Node message mismatch error")]
NodeMsgMismatch,
#[error("Node id mismatch error, expected: {0}, found: {1}")]
NodeIDMismatch(NodeID, NodeID),
#[error("Mutex poisson error")]
MutexPoison,
#[error("Array2D dimension mismatch error, expected: {0:?}, got: {1:?}")]
Array2DDimensionMismatch((u64, u64), (u64, u64)),
#[error("Custom user defined error: {0}")]
Custom(u32),
}
impl<T> From<sync::PoisonError<sync::MutexGuard<'_, T>>> for NCError {
fn from(_: sync::PoisonError<sync::MutexGuard<'_, T>>) -> NCError {
NCError::MutexPoison
}
}