diff options
Diffstat (limited to 'shared/src/packets.rs')
-rw-r--r-- | shared/src/packets.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/shared/src/packets.rs b/shared/src/packets.rs index c03f5e5..c1e9fc0 100644 --- a/shared/src/packets.rs +++ b/shared/src/packets.rs @@ -60,12 +60,12 @@ impl<T> Resource<T> { #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct Object(pub u128); -#[derive(Clone)] +#[derive(Clone, PartialEq)] pub struct Data(pub Vec<u8>); -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub struct Message(pub String); -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub enum Packet { Connect(u128), Disconnect, @@ -174,6 +174,7 @@ impl ReadWrite for Packet { let packet_len = u32::read(r)?; Ok(match u8::read(r)? { 0x00 => Packet::Connect(read_u128(r)?), + 0xff => Packet::Disconnect, 0x01 => Packet::RequestResource(Resource::read(r)?), 0x02 => Packet::RespondResource(Resource::read(r)?, Data::read(r)?), 0x03 => Packet::Add(Object::read(r)?, Resource::read(r)?), @@ -249,3 +250,25 @@ impl Display for Object { impl Object { pub const ROOT: Object = Object(0); } + +#[test] +#[cfg(test)] +fn test_ser() { + use std::io::Cursor; + fn a(packet: Packet) { + let mut buf = Vec::new(); + packet.write(&mut buf).unwrap(); + let mut buf = Cursor::new(buf); + let p = Packet::read(&mut buf).unwrap(); + assert_eq!(packet, p); + assert_eq!(buf.get_ref().len(), buf.position() as usize) + } + a(Packet::Add(Object(5), Resource([5; 32], PhantomData))); + a(Packet::Disconnect); + a(Packet::Disconnect); + a(Packet::Chat( + Object(132), + Message("Hello world".to_string()), + )); + a(Packet::Parent(Object(4), Object(5))) +} |