aboutsummaryrefslogtreecommitdiff
path: root/minecraft-protocol/src/mc_buf.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2021-12-07 21:48:37 +0000
committermat <github@matdoes.dev>2021-12-07 21:48:37 +0000
commit9c14b3f32346f071ad12faf86105f5fd3ce03959 (patch)
tree003ae48d033ff0f335c81389a4772b17813121c1 /minecraft-protocol/src/mc_buf.rs
parent500754eab0bb99e6bd1769ddd999241ce26b5f91 (diff)
downloadazalea-drasl-9c14b3f32346f071ad12faf86105f5fd3ce03959.tar.xz
polish before being ready for finishing packets
Diffstat (limited to 'minecraft-protocol/src/mc_buf.rs')
-rw-r--r--minecraft-protocol/src/mc_buf.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/minecraft-protocol/src/mc_buf.rs b/minecraft-protocol/src/mc_buf.rs
index f657626f..1e6e5b08 100644
--- a/minecraft-protocol/src/mc_buf.rs
+++ b/minecraft-protocol/src/mc_buf.rs
@@ -50,6 +50,9 @@ pub async fn read_varint<T: AsyncRead + std::marker::Unpin>(
pub fn write_varint(buf: &mut Vec<u8>, mut value: u32) {
let mut buffer = [0];
+ if value == 0 {
+ buf.write(&buffer).unwrap();
+ }
while value != 0 {
buffer[0] = (value & 0b0111_1111) as u8;
value = (value >> 7) & (u32::max_value() >> 6);
@@ -68,12 +71,22 @@ mod tests {
let mut buf = Vec::new();
write_varint(&mut buf, 123456);
assert_eq!(buf, vec![192, 196, 7]);
+
+ let mut buf = Vec::new();
+ write_varint(&mut buf, 0);
+ assert_eq!(buf, vec![0]);
}
#[tokio::test]
async fn test_read_varint() {
let mut buf = BufReader::new(Cursor::new(vec![192, 196, 7]));
assert_eq!(read_varint(&mut buf).await.unwrap(), (123456, 3));
+
+ let mut buf = BufReader::new(Cursor::new(vec![0]));
+ assert_eq!(read_varint(&mut buf).await.unwrap(), (0, 1));
+
+ let mut buf = BufReader::new(Cursor::new(vec![1]));
+ assert_eq!(read_varint(&mut buf).await.unwrap(), (1, 1));
}
#[tokio::test]