diff --git a/src/client.rs b/src/client.rs index 67c29f0..898f694 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,6 +1,6 @@ use std::io::Result; use connection::Connection; -use models::Handshake; +use models::{Handshake, OpCode}; #[cfg(feature = "rich_presence")] use models::{SetActivityArgs, SetActivity}; @@ -31,7 +31,7 @@ impl Client where F: FnOnce(SetActivity) -> SetActivity { let args = SetActivityArgs::command(f(SetActivity::new())); - self.socket.send(1, args)?; + self.socket.send(OpCode::Frame, args)?; Ok(()) } @@ -40,7 +40,7 @@ impl Client fn handshake(&mut self) -> Result<()> { let client_id = self.client_id; let version = self.version; - self.socket.send(0, Handshake::new(client_id, version))?; + self.socket.send(OpCode::Handshake, Handshake::new(client_id, version))?; Ok(()) } } diff --git a/src/connection/base.rs b/src/connection/base.rs index 0a578e3..5e8aab4 100644 --- a/src/connection/base.rs +++ b/src/connection/base.rs @@ -1,14 +1,14 @@ use std::io::Result; use std::marker::Sized; use std::fmt::Debug; -use models::Payload; +use models::{Payload, OpCode}; pub trait Connection where Self: Sized { fn connect() -> Result; - fn send(&mut self, opcode: u32, payload: T) -> Result<()> + fn send(&mut self, opcode: OpCode, payload: T) -> Result<()> where T: Payload + Debug; fn recv(&mut self) -> Result>; diff --git a/src/connection/unix.rs b/src/connection/unix.rs index ce843a2..1213317 100644 --- a/src/connection/unix.rs +++ b/src/connection/unix.rs @@ -6,7 +6,7 @@ use std::env; use std::fmt::Debug; use models::Payload; -use models::Message; +use models::{Message, OpCode}; use super::base::Connection; pub struct UnixConnection { @@ -41,7 +41,7 @@ impl Connection for UnixConnection { Ok(Self { socket }) } - fn send(&mut self, opcode: u32, payload: T) -> Result<()> + fn send(&mut self, opcode: OpCode, payload: T) -> Result<()> where T: Payload + Debug { debug!("payload: {:#?}", payload); @@ -49,7 +49,7 @@ impl Connection for UnixConnection { Err(why) => error!("{:?}", why), Ok(bytes) => { self.socket.write_all(bytes.as_ref())?; - debug!("sent opcode: {}", opcode); + debug!("sent opcode: {:?}", opcode); self.recv()?; } }; diff --git a/src/models/message.rs b/src/models/message.rs index 41ecd67..e6a8bd9 100644 --- a/src/models/message.rs +++ b/src/models/message.rs @@ -3,6 +3,12 @@ use byte::ctx::{Endian, LE, Str}; use serde_json; use serde::Serialize; +#[derive(Debug, Copy, Clone)] +pub enum OpCode { + Handshake, + Frame, +} + #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] #[repr(C)] pub struct Message { @@ -31,11 +37,11 @@ impl TryWrite for Message { } impl Message { - pub fn new(opcode: u32, message: T) -> Self + pub fn new(opcode: OpCode, message: T) -> Self where T: Serialize { Message { - opcode, + opcode: opcode as u32, message: serde_json::to_string(&message).unwrap() } } @@ -65,7 +71,7 @@ mod tests { #[test] fn test_encoder() { - let msg = Message::new(1, Something { empty: true }); + let msg = Message::new(OpCode::Frame, Something { empty: true }); let encoded = msg.encode().unwrap(); let decoded = Message::decode(encoded.as_ref()).unwrap(); assert_eq!(msg, decoded); diff --git a/src/models/mod.rs b/src/models/mod.rs index e94e33e..1126b14 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -5,7 +5,7 @@ mod handshake; mod set_activity; use serde::Serialize; -pub use self::message::Message; +pub use self::message::{Message, OpCode}; pub use self::command::Command; pub use self::handshake::Handshake; #[cfg(feature = "rich_presence")]