From 32dc748fbf1f370160511e441c7854f36fd46231 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 3 Sep 2014 16:19:14 -0400 Subject: fix :-prefixed params --- src/types.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/types.rs b/src/types.rs index 0fca609..fc62be5 100644 --- a/src/types.rs +++ b/src/types.rs @@ -53,13 +53,12 @@ impl Message { return ret; } - let remaining = params.slice(offset, len); - - if remaining.starts_with(":") { - ret.push(remaining.to_string()); + if params.char_at(offset) == ':' { + ret.push(params.slice(offset + 1, len).to_string()); return ret; } + let remaining = params.slice(offset, len); match remaining.find(' ') { Some(next) => { ret.push(remaining.slice(0, next).to_string()); @@ -91,4 +90,49 @@ fn test_message_parser () { ) ); } + + { + let msg = ":WiZ NICK Kilroy\r\n"; + assert_eq!( + Message::parse(msg), + Ok( + Message { + from: Some("WiZ".to_string()), + message_type: CommandMessage(Nick), + params: vec!["Kilroy".to_string()], + } + ) + ); + } + + { + let msg = "QUIT :Gone to have lunch\r\n"; + assert_eq!( + Message::parse(msg), + Ok( + Message { + from: None, + message_type: CommandMessage(Quit), + params: vec!["Gone to have lunch".to_string()], + } + ) + ); + } + + { + let msg = ":Trillian SQUIT cm22.eng.umd.edu :Server out of control\r\n"; + assert_eq!( + Message::parse(msg), + Ok( + Message { + from: Some("Trillian".to_string()), + message_type: CommandMessage(Squit), + params: vec![ + "cm22.eng.umd.edu".to_string(), + "Server out of control".to_string(), + ], + } + ) + ); + } } -- cgit v1.2.3-54-g00ecf