use std::fmt;
use crate::packet::SerializationError;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum DisconnectReason {
Transport,
DisconnectedByClient,
DisconnectedByServer,
PacketSerialization(SerializationError),
PacketDeserialization(SerializationError),
ReceivedInvalidChannelId(u8),
SendChannelError { channel_id: u8, error: ChannelError },
ReceiveChannelError { channel_id: u8, error: ChannelError },
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ChannelError {
ReliableChannelMaxMemoryReached,
InvalidSliceMessage,
}
impl fmt::Display for ChannelError {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
use ChannelError::*;
match *self {
ReliableChannelMaxMemoryReached => write!(fmt, "reliable channel memory usage was exhausted"),
InvalidSliceMessage => write!(fmt, "received an invalid slice packet"),
}
}
}
impl fmt::Display for DisconnectReason {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
use DisconnectReason::*;
match *self {
Transport => write!(fmt, "connection terminated by the transport layer"),
DisconnectedByClient => write!(fmt, "connection terminated by the client"),
DisconnectedByServer => write!(fmt, "connection terminated by the server"),
PacketSerialization(err) => write!(fmt, "failed to serialize packet: {err}"),
PacketDeserialization(err) => write!(fmt, "failed to deserialize packet: {err}"),
ReceivedInvalidChannelId(id) => write!(fmt, "received message with invalid channel {id}"),
SendChannelError { channel_id, error } => write!(fmt, "send channel {channel_id} with error: {error}"),
ReceiveChannelError { channel_id, error } => write!(fmt, "receive channel {channel_id} with error: {error}"),
}
}
}
impl std::error::Error for ChannelError {}
#[derive(Debug)]
pub struct ClientNotFound;
impl std::error::Error for ClientNotFound {}
impl fmt::Display for ClientNotFound {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "client with given id was not found")
}
}