ap_kcp 0.1.1

AP-KCP Protocol Library
Documentation
use std::error::Error as StdError;
use std::fmt;
use std::io::{self, ErrorKind};

/// KcpError
#[derive(Debug)]
pub enum KcpError {
    TooManyStreams,
    InvalidSegmentDataSize(usize, usize),
    IoError(io::Error),
    UnsupportCmd(u8),
    Timeout,
    NoResponse,
    Shutdown(String),
    InvalidConfig(String),
}

impl StdError for KcpError {}

impl fmt::Display for KcpError {
    fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
        write!(f, "{:?}", self)
    }
}

fn make_io_error<T>(kind: ErrorKind, msg: T) -> io::Error
where
    T: Into<Box<dyn StdError + Send + Sync>>,
{
    io::Error::new(kind, msg)
}

impl From<KcpError> for io::Error {
    fn from(err: KcpError) -> io::Error {
        let kind = match err {
            KcpError::IoError(err) => return err,
            _ => ErrorKind::Other,
        };

        make_io_error(kind, err)
    }
}

impl From<io::Error> for KcpError {
    fn from(err: io::Error) -> KcpError {
        KcpError::IoError(err)
    }
}

/// KCP result
pub type KcpResult<T> = Result<T, KcpError>;