use std::fmt;
pub const OP_CODE_UN_MASK: u8 = 0b0000_1111;
pub const OP_CODE_MASK: u8 = 0b1000_0000;
pub const PAYLOAD_KEY_UN_MASK: u8 = 0b0111_1111;
pub const OP_CONTINUATION: u8 = 0x0;
pub const OP_TEXT: u8 = 0x1;
pub const OP_BINARY: u8 = 0x2;
pub const OP_CLOSE: u8 = 0x8;
pub const OP_PING: u8 = 0x9;
pub const OP_PONG: u8 = 0xA;
#[derive(Debug, Clone)]
pub enum OpCode {
Continuation,
Text,
Binary,
Close,
Ping,
Pong
}
#[derive(Debug)]
pub enum ReadError {
EAGAIN,
EBADF,
EFAULT,
EINTR,
EINVAL,
EIO,
EISDIR,
ENOMEM,
OpCode
}
#[derive(Debug)]
pub enum WriteError {
EAGAIN,
EBADF,
EFAULT,
EFBIG,
EINTR,
EINVAL,
EIO,
ENOSPC,
EPIPE
}
#[derive(Debug)]
pub enum SetFdError {
EACCES,
EAGAIN,
EBADF,
EDEADLK,
EFAULT,
EINTR,
EINVAL,
EMFILE,
ENOLCK,
EPERM
}
impl fmt::Display for ReadError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
ReadError::EAGAIN => "EAGAIN".fmt(f),
ReadError::EBADF => "EBADF".fmt(f),
ReadError::EFAULT => "EFAULT".fmt(f),
ReadError::EINTR => "EINTR".fmt(f),
ReadError::EINVAL => "EINVAL".fmt(f),
ReadError::EIO => "EIO".fmt(f),
ReadError::EISDIR => "EISDIR".fmt(f),
ReadError::ENOMEM => "ENOMEM".fmt(f),
ReadError::OpCode => "OpCode".fmt(f)
}
}
}
impl fmt::Display for WriteError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
WriteError::EAGAIN => "EAGAIN".fmt(f),
WriteError::EBADF => "EBADF".fmt(f),
WriteError::EFAULT => "EFAULT".fmt(f),
WriteError::EFBIG => "EFBIG".fmt(f),
WriteError::EINTR => "EINTR".fmt(f),
WriteError::EINVAL => "EINVAL".fmt(f),
WriteError::EIO => "EIO".fmt(f),
WriteError::ENOSPC => "ENOSPC".fmt(f),
WriteError::EPIPE => "EPIPE".fmt(f)
}
}
}
impl fmt::Display for SetFdError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
SetFdError::EACCES => "EACCES".fmt(f),
SetFdError::EAGAIN => "EAGAIN".fmt(f),
SetFdError::EBADF => "EBADF".fmt(f),
SetFdError::EDEADLK => "EDEADLK".fmt(f),
SetFdError::EFAULT => "EFAULT".fmt(f),
SetFdError::EINTR => "EINTR".fmt(f),
SetFdError::EINVAL => "EINVAL".fmt(f),
SetFdError::EMFILE => "EMFILE".fmt(f),
SetFdError::ENOLCK => "ENOLCK".fmt(f),
SetFdError::EPERM => "EPERM".fmt(f)
}
}
}
impl fmt::Display for OpCode {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
OpCode::Continuation => "Continuation".fmt(f),
OpCode::Text => "Text".fmt(f),
OpCode::Binary => "Binary".fmt(f),
OpCode::Close => "Close".fmt(f),
OpCode::Ping => "Ping".fmt(f),
OpCode::Pong => "Pong".fmt(f),
}
}
}