summaryrefslogtreecommitdiff
path: root/shared/src/packets.rs
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src/packets.rs')
-rw-r--r--shared/src/packets.rs29
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)))
+}