#[derive(Debug, PartialOrd, PartialEq)]
#[repr(u16)]
pub enum Code {
Request(u16),
Response(u16),
Error(u16),
Status(u16),
}
impl Code {
#[allow(unreachable_code)]
pub const fn new(value: u16) -> Self {
return if value < 200 {
return Code::Request(value);
} else if value < 300 {
return Code::Response(value);
} else if value < 400 {
return Code::Error(value);
} else {
return Code::Status(value);
};
}
pub fn value(self) -> u16 {
return match self {
Code::Request(req) => req,
Code::Response(rsp) => rsp,
Code::Error(err) => err,
Code::Status(stat) => stat,
};
}
}
pub const REQUEST_CONNECTION: Code = Code::Request(0);
pub const REQUEST_RESPONSE: Code = Code::Request(1);
pub const REQUEST_CHUNK: Code = Code::Request(2);
pub const REQUEST_FILE: Code = Code::Request(3);
pub const REQUEST_PORT_SWITCH: Code = Code::Request(4);
pub const CONNECTION_ACCEPTED: Code = Code::Response(200);
pub const CONNECTION_DENIED: Code = Code::Response(201);
pub const REGULAR_RESPONSE: Code = Code::Response(202);
pub const CHUNK_RESPONSE: Code = Code::Response(203);
pub const FILE_RESPONSE: Code = Code::Response(204);
pub const DISCONNECT: Code = Code::Response(205);
pub const INVALID_RR: Code = Code::Response(206);
pub const LENGTH_EXCEEDED: Code = Code::Error(300);
pub const INVALID_DID: Code = Code::Error(301);
pub const DISTRIBUTOR_NOT_FOUND: Code = Code::Error(302);
pub const READ_TIMEDOUT: Code = Code::Status(400);
pub const WRITE_TIMEDOUT: Code = Code::Status(401);
pub const READ_SUCCESS: Code = Code::Status(402);
pub const WRITE_SUCCESS: Code = Code::Status(403);
pub const UNKNOWN_STATUS: Code = Code::Status(404);
pub const STATUS_OK: Code = Code::Status(405);
pub const WRITE_FAILED: Code = Code::Status(406);
pub const READ_FAILED: Code = Code::Status(407);
pub const REMOVE_CLIENT: Code = Code::Status(408);
pub const TEAPOT: Code = Code::Status(418);