summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-09-03 16:19:14 -0400
committerJesse Luehrs <doy@tozt.net>2014-09-03 16:19:14 -0400
commit32dc748fbf1f370160511e441c7854f36fd46231 (patch)
treea27b9de29b74141d2591bc627a7d8601d7ffc6c7
parenta59332af810340a2c2182875a23dfae290fec19d (diff)
downloadrust-irc-32dc748fbf1f370160511e441c7854f36fd46231.tar.gz
rust-irc-32dc748fbf1f370160511e441c7854f36fd46231.zip
fix :-prefixed params
-rw-r--r--src/types.rs52
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(),
+ ],
+ }
+ )
+ );
+ }
}