2021-02-23 17:23:06 +03:00

108 lines
2.7 KiB
Rust

#[macro_use]
extern crate minecraft_protocol_derive;
use minecraft_protocol::decoder::Decoder;
use minecraft_protocol::encoder::Encoder;
use minecraft_protocol::error::{DecodeError, EncodeError};
#[derive(Packet)]
pub struct HalfLong {
#[packet(bitfield(size = 32))]
pub _unused: u32,
#[packet(bitfield(size = 32))]
pub value: u32,
}
#[derive(Packet)]
pub struct HalfInt {
#[packet(bitfield(size = 16))]
pub _unused: u16,
#[packet(bitfield(size = 16))]
pub value: u16,
}
#[derive(Packet)]
pub struct HalfShort {
#[packet(bitfield(size = 8))]
pub _unused: u8,
#[packet(bitfield(size = 8))]
pub value: u8,
}
#[cfg(test)]
mod tests {
use crate::{HalfInt, HalfLong, HalfShort};
use minecraft_protocol::decoder::Decoder;
use minecraft_protocol::encoder::Encoder;
use minecraft_protocol::error::{DecodeError, EncodeError};
use std::io::Cursor;
#[test]
fn test_encode_half_long_u64_bitfield() {
let half = HalfLong {
_unused: 0,
value: u32::MAX,
};
let mut vec = Vec::new();
half.encode(&mut vec).expect("Failed to encode half");
assert_eq!(vec, u32::MAX.to_be_bytes().to_vec());
}
#[test]
fn test_decode_half_long_u64_bitfield() {
let value = u32::MAX as u64;
let vec = value.to_be_bytes().to_vec();
let mut cursor = Cursor::new(vec);
let half = HalfLong::decode(&mut cursor).expect("Failed to decode half");
assert_eq!(half.value, u32::MAX);
}
#[test]
fn test_encode_half_int_u32_bitfield() {
let half = HalfInt {
_unused: 0,
value: u16::MAX,
};
let mut vec = Vec::new();
half.encode(&mut vec).expect("Failed to encode half");
assert_eq!(vec, u16::MAX.to_be_bytes().to_vec());
}
#[test]
fn test_decode_half_int_u32_bitfield() {
let value = u16::MAX as u32;
let vec = value.to_be_bytes().to_vec();
let mut cursor = Cursor::new(vec);
let half = HalfInt::decode(&mut cursor).expect("Failed to decode half");
assert_eq!(half.value, u16::MAX);
}
#[test]
fn test_encode_half_short_u8_bitfield() {
let half = HalfShort {
_unused: 0,
value: u8::MAX,
};
let mut vec = Vec::new();
half.encode(&mut vec).expect("Failed to encode half");
assert_eq!(vec, u8::MAX.to_be_bytes().to_vec());
}
#[test]
fn test_decode_half_short_u8_bitfield() {
let value = u8::MAX as u16;
let vec = value.to_be_bytes().to_vec();
let mut cursor = Cursor::new(vec);
let half = HalfShort::decode(&mut cursor).expect("Failed to decode half");
assert_eq!(half.value, u8::MAX);
}
}