From fe1e048e42865a57b7bfd6e78cf44aefb1269a11 Mon Sep 17 00:00:00 2001 From: Till Hoeppner Date: Mon, 3 Nov 2014 16:50:28 +0100 Subject: Proper PRIVMSG parsing --- src/event.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/event.rs') diff --git a/src/event.rs b/src/event.rs index 7e280a9..aef34f9 100644 --- a/src/event.rs +++ b/src/event.rs @@ -4,15 +4,28 @@ use ident::Ident; pub struct Event { pub prefix: String, pub command: String, - pub content: String + pub content: Vec } pub trait ParseResult { fn parse(event: Event) -> Option; } +pub const PING: &'static str = "PING"; + pub const PRIVMSG: &'static str = "PRIVMSG"; +fn join(v: Vec, from: uint) -> String { + let mut msg = if v[from].chars().next().unwrap() == ':' { + v[from][][1..].into_string() + } else { v[from].clone() }; + for m in v.iter().skip(from + 1) { + msg.push_str(" "); + msg.push_str(m.trim_right()); + } + msg +} + pub struct PrivMsg { pub from: Ident, pub to: String, @@ -22,10 +35,12 @@ pub struct PrivMsg { impl ParseResult for PrivMsg { fn parse(event: Event) -> Option { let from = Ident::parse(event.prefix[]); + let to = event.content[0].clone(); match from { Some(from) => Some(PrivMsg { from: from, - content: event.content + to: to, + content: join(event.content, 1) }), None => None } -- cgit v1.2.3