From a4dcf4b1d4586055e949062a5f5be141007ef58c Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Tue, 10 Jun 2014 01:16:45 -0400 Subject: Updated --- src/lib.rs | 4 ++++ src/msg.rs | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index c367185..3898480 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,6 +46,10 @@ impl IrcClient { self.output_sender.send(message); } + pub fn sender(&self) -> Sender { + self.output_sender.clone() + } + fn on_msg_rec(msg: &Message, sender: &Sender) { let _prefix = &msg.prefix; let cmd = &msg.command; diff --git a/src/msg.rs b/src/msg.rs index 8db6077..0d2daaa 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -17,7 +17,7 @@ pub mod cmd { Pong(String), Error(String), Away(Option), - Numeric(u16, Option), + Numeric(u16, String, Option), UnknownCmd(String, Vec) } } @@ -66,7 +66,7 @@ impl<'a> fmt::Show for Message { cmd::Pong(ref msg) => write!(formatter, "PONG :{}", msg), cmd::Error(ref msg) => write!(formatter, "ERROR :{}", msg), cmd::Away(ref msg) => if msg.is_some() { write!(formatter, "AWAY :{}", msg.get_ref()) } else { write!(formatter, "AWAY") }, - cmd::Numeric(i, ref msg) => if msg.is_some() { write!(formatter, "{:03u} :{}", i, msg.get_ref()) } else { write!(formatter, "{:03u}", i) }, + cmd::Numeric(i, ref target, ref msg) => if msg.is_some() { write!(formatter, "{:03u} {} :{}", i, target, msg.get_ref()) } else { write!(formatter, "{:03u} {}", i, target) }, cmd::UnknownCmd(ref cmd, ref args) => { try!(write!(formatter, "{}", cmd)); let mut iter = args.iter().peekable(); @@ -135,7 +135,12 @@ impl FromStr for Message { } } - args.push(current_str.take_unwrap()); + if cmd.is_none() { + cmd = current_str.take(); + } + else { + args.push(current_str.take_unwrap()); + } let cmd = match cmd.map(|s| s.into_ascii_upper()).as_ref().map(|s| s.as_slice()) { Some(s) => { @@ -162,7 +167,10 @@ impl FromStr for Message { "AWAY" if args.len() == 0 || args.len() == 1 => cmd::Away(args.pop()), other => { match from_str::(other) { - Some(n) if args.len() == 0 || args.len() == 1 => cmd::Numeric(n, args.pop()), + Some(n) if args.len() == 1 || args.len() == 2 => { + let mut iter = args.move_iter(); + cmd::Numeric(n, iter.next().unwrap(), iter.next()) + } _ => cmd::UnknownCmd(s.to_string(), args) } } -- cgit v1.2.3-54-g00ecf