some return_error! now

This commit is contained in:
MeexReay 2024-05-25 23:41:05 +03:00
parent a3fd9dc40b
commit fa999ecd30

View File

@ -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>;