From 0a3f5acd4df4a48b10c4f0d63ea4a7070c39c0b5 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Fri, 13 Jun 2014 12:21:28 -0400 Subject: Allow multiple arguments for a numeric command --- src/msg.rs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/msg.rs b/src/msg.rs index 7bc03ca..f84748d 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -17,7 +17,7 @@ pub mod cmd { Pong(String), Error(String), Away(Option), - Numeric(u16, String, Option), + Numeric(u16, String, Vec), UnknownCmd(String, Vec) } } @@ -63,8 +63,27 @@ impl 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 target, ref msg) => if msg.is_some() { write!(formatter, "{:03u} {} :{}", i, target, msg.get_ref()) } else { write!(formatter, "{:03u} {}", i, target) }, cmd::Motd(ref target) => if target.is_some() { write!(formatter, "MOTD :{}", target.get_ref()) } else { write!(formatter, "MOTD") }, + cmd::Numeric(i, ref target, ref args) => { + try!(write!(formatter, "{:03u} {}", i, target)); + let mut iter = args.iter().peekable(); + loop { + match iter.next() { + Some(arg) => { + try!( + if iter.peek().is_some() { + write!(formatter, " {}", arg) + } + else { + write!(formatter, " :{}", arg) + } + ); + } + None => break + } + } + Ok(()) + } cmd::UnknownCmd(ref cmd, ref args) => { try!(write!(formatter, "{}", cmd)); let mut iter = args.iter().peekable(); @@ -214,9 +233,9 @@ impl FromStr for Message { "MOTD" if args.len() == 0 || args.len() == 1 => cmd::Motd(args.pop()), other => { match from_str::(other) { - Some(n) if args.len() == 1 || args.len() == 2 => { - let mut iter = args.move_iter(); - cmd::Numeric(n, iter.next().unwrap(), iter.next()) + Some(n) if args.len() > 0 => { + let target = args.shift().unwrap(); + cmd::Numeric(n, target, args) } _ => cmd::UnknownCmd(s.to_string(), args) } -- cgit v1.2.3-54-g00ecf