rercon 0.1.1

A simple RCON library with automatic reconnection support
Documentation
use std::{io, net};
use std::fmt::{Debug, Display, Formatter};
use std::string::FromUtf8Error;

use crate::error::RconError::{AddressParseError, IOError, UTFEncodingError};

#[derive(Debug)]
pub enum RconError {
    AddressParseError(net::AddrParseError),
    IOError(io::Error),
    CommandTooLongError,
    UTFEncodingError(FromUtf8Error),
    UnexpectedPacketError,
    DesynchronizedPacketError,
    PasswordIncorrectError,
    BusyReconnecting(String),
}

impl ::std::error::Error for RconError {
    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
        match self {
            IOError(e) => Some(e),
            AddressParseError(e) => Some(e),
            UTFEncodingError(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 {
        IOError(e)
    }
}

impl From<net::AddrParseError> for RconError {
    fn from(e: net::AddrParseError) -> Self {
        AddressParseError(e)
    }
}

impl From<FromUtf8Error> for RconError {
    fn from(e: FromUtf8Error) -> Self {
        UTFEncodingError(e)
    }
}