diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-09-03 16:19:14 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-09-03 16:19:14 -0400 |
commit | 32dc748fbf1f370160511e441c7854f36fd46231 (patch) | |
tree | a27b9de29b74141d2591bc627a7d8601d7ffc6c7 | |
parent | a59332af810340a2c2182875a23dfae290fec19d (diff) | |
download | rust-irc-32dc748fbf1f370160511e441c7854f36fd46231.tar.gz rust-irc-32dc748fbf1f370160511e441c7854f36fd46231.zip |
fix :-prefixed params
-rw-r--r-- | src/types.rs | 52 |
1 files changed, 48 insertions, 4 deletions
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(), + ], + } + ) + ); + } } |