summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-09-03 19:41:42 -0400
committerJesse Luehrs <doy@tozt.net>2014-09-03 19:41:42 -0400
commitc5116ef186749a2ae57e3620ad766a46c178cbbb (patch)
tree26edfcb223a177c2685a86948767089809a26c84
parentaac2fa3928fcd1140115279a34295fc7a2f9f73a (diff)
downloadrust-irc-c5116ef186749a2ae57e3620ad766a46c178cbbb.tar.gz
rust-irc-c5116ef186749a2ae57e3620ad766a46c178cbbb.zip
add support for writing irc messages
-rw-r--r--src/client.rs9
-rw-r--r--src/message.rs30
2 files changed, 38 insertions, 1 deletions
diff --git a/src/client.rs b/src/client.rs
index 9dd5191..86c3857 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -39,4 +39,13 @@ impl Client {
None => fail!(),
}
}
+
+ pub fn write (&mut self, msg: Message) {
+ match self.connection {
+ Some(ref mut conn) => {
+ msg.write_protocol_string(conn);
+ },
+ None => fail!(),
+ }
+ }
}
diff --git a/src/message.rs b/src/message.rs
index 8912834..d4db1b5 100644
--- a/src/message.rs
+++ b/src/message.rs
@@ -1,4 +1,4 @@
-use constants::MessageType;
+use constants::{CommandMessage, MessageType, ReplyMessage};
#[deriving(PartialEq, Eq, Show)]
pub struct Message {
@@ -43,6 +43,34 @@ impl Message {
&self.params
}
+ pub fn write_protocol_string<W: Writer> (&self, w: &mut W) {
+ match &self.from {
+ &Some(ref f) => { write!(w, ":{} ", f); },
+ &None => {},
+ }
+
+ match &self.message_type {
+ &CommandMessage(ref c) => {
+ write!(w, "{}", c);
+ },
+ &ReplyMessage(ref r) => {
+ write!(w, "{}", r);
+ },
+ }
+
+ for param in self.params.iter() {
+ if param.as_slice().contains_char(' ') {
+ write!(w, " :{}", param);
+ }
+ else {
+ write!(w, " {}", param);
+ }
+ }
+
+ write!(w, "\r\n");
+ w.flush();
+ }
+
fn parse_params(params: &str) -> Vec<String> {
let mut offset = 0;
let len = params.len();