use std::{
fmt::{Debug, Display, Formatter},
string::FromUtf8Error,
{io, net},
};
use crate::error::RconError::{AddressParse, UTFEncoding, IO};
#[derive(Debug)]
pub enum RconError {
AddressParse(net::AddrParseError),
IO(io::Error),
CommandTooLong,
UTFEncoding(FromUtf8Error),
UnexpectedPacket,
PasswordIncorrect,
BusyReconnecting(String),
}
impl ::std::error::Error for RconError {
fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
match self {
IO(e) => Some(e),
AddressParse(e) => Some(e),
UTFEncoding(e) => Some(e),
_ => None,
}
}
}
impl Display for RconError {
fn fmt(&self, f: &mut Formatter) -> Result<(), ::std::fmt::Error> {
(self as &dyn Debug).fmt(f)
}
}
impl From<io::Error> for RconError {
fn from(e: io::Error) -> Self {
IO(e)
}
}
impl From<net::AddrParseError> for RconError {
fn from(e: net::AddrParseError) -> Self {
AddressParse(e)
}
}
impl From<FromUtf8Error> for RconError {
fn from(e: FromUtf8Error) -> Self {
UTFEncoding(e)
}
}