some return_error! now
This commit is contained in:
parent
a3fd9dc40b
commit
fa999ecd30
40
src/lib.rs
40
src/lib.rs
@ -44,22 +44,24 @@ pub struct Packet {
|
|||||||
pub buffer: ByteBuffer
|
pub buffer: ByteBuffer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! return_error {
|
||||||
// copied from varint-rs (im sorry T-T)
|
($ex: expr, $error: expr) => {
|
||||||
|
match $ex {
|
||||||
|
Ok(i) => i,
|
||||||
|
Err(_) => { return Err($error) },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! size_varint {
|
macro_rules! size_varint {
|
||||||
($type: ty, $self: expr) => {
|
($type: ty, $self: expr) => {
|
||||||
{
|
{
|
||||||
let mut shift: $type = 0;
|
let mut shift: $type = 0;
|
||||||
let mut decoded: $type = 0;
|
let mut decoded: $type = 0;
|
||||||
let mut next: u8 = 0;
|
|
||||||
let mut size: $type = 0;
|
let mut size: $type = 0;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match DataBufferReader::read_byte($self) {
|
let next = return_error!(DataBufferReader::read_byte($self), ProtocolError::VarIntError);
|
||||||
Ok(value) => next = value,
|
|
||||||
Err(error) => Err(error)?
|
|
||||||
}
|
|
||||||
|
|
||||||
size += 1;
|
size += 1;
|
||||||
|
|
||||||
@ -80,13 +82,9 @@ macro_rules! read_varint {
|
|||||||
{
|
{
|
||||||
let mut shift: $type = 0;
|
let mut shift: $type = 0;
|
||||||
let mut decoded: $type = 0;
|
let mut decoded: $type = 0;
|
||||||
let mut next: u8 = 0;
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match DataBufferReader::read_byte($self) {
|
let next = return_error!(DataBufferReader::read_byte($self), ProtocolError::VarIntError);
|
||||||
Ok(value) => next = value,
|
|
||||||
Err(error) => Err(error)?
|
|
||||||
}
|
|
||||||
|
|
||||||
decoded |= ((next & 0b01111111) as $type) << shift;
|
decoded |= ((next & 0b01111111) as $type) << shift;
|
||||||
|
|
||||||
@ -106,33 +104,21 @@ macro_rules! write_varint {
|
|||||||
let mut value: $type = $value;
|
let mut value: $type = $value;
|
||||||
|
|
||||||
if value == 0 {
|
if value == 0 {
|
||||||
DataBufferWriter::write_byte($self, 0)
|
Ok(return_error!(DataBufferWriter::write_byte($self, 0), ProtocolError::VarIntError))
|
||||||
} else {
|
} else {
|
||||||
while value >= 0b10000000 {
|
while value >= 0b10000000 {
|
||||||
let next: u8 = ((value & 0b01111111) as u8) | 0b10000000;
|
let next: u8 = ((value & 0b01111111) as u8) | 0b10000000;
|
||||||
value >>= 7;
|
value >>= 7;
|
||||||
|
|
||||||
match DataBufferWriter::write_byte($self, next) {
|
return_error!(DataBufferWriter::write_byte($self, next), ProtocolError::VarIntError);
|
||||||
Err(error) => Err(error)?,
|
|
||||||
Ok(_) => ()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DataBufferWriter::write_byte($self, (value & 0b01111111) as u8)
|
Ok(return_error!(DataBufferWriter::write_byte($self, (value & 0b01111111) as u8), ProtocolError::VarIntError))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! return_error {
|
|
||||||
($ex: expr, $error: expr) => {
|
|
||||||
match $ex {
|
|
||||||
Ok(i) => i,
|
|
||||||
Err(_) => { return Err($error) },
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait DataBufferReader {
|
pub trait DataBufferReader {
|
||||||
fn read_bytes(&mut self, size: usize) -> Result<Vec<u8>, ProtocolError>;
|
fn read_bytes(&mut self, size: usize) -> Result<Vec<u8>, ProtocolError>;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user