Refactored Command::from_message(...) to be more easily understood.

This commit is contained in:
Aaron Weiss 2014-11-06 20:54:51 -05:00
parent 2b7129c74a
commit 442115330e

View file

@ -229,8 +229,7 @@ impl<'a> Command<'a> {
/// Converts a Message into a Command. /// Converts a Message into a Command.
#[stable] #[stable]
pub fn from_message(m: &'a Message) -> IoResult<Command<'a>> { pub fn from_message(m: &'a Message) -> IoResult<Command<'a>> {
/* FIXME: Re-write this using match as so: Ok(if let "PASS" = m.command[] {
if let "PASS" = m.command[] {
match m.suffix { match m.suffix {
Some(ref suffix) => { Some(ref suffix) => {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
@ -241,132 +240,142 @@ impl<'a> Command<'a> {
PASS(m.args[0][]) PASS(m.args[0][])
} }
} }
}
*/
Ok(if let "PASS" = m.command[] {
if m.suffix.is_some() {
if m.args.len() != 0 { return Err(invalid_input()) }
PASS(m.suffix.as_ref().unwrap()[])
} else {
if m.args.len() != 1 { return Err(invalid_input()) }
PASS(m.args[0][])
}
} else if let "NICK" = m.command[] { } else if let "NICK" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
NICK(m.suffix.as_ref().unwrap()[]) NICK(suffix[])
} else { },
None => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
NICK(m.args[0][]) NICK(m.args[0][])
} }
}
} else if let "USER" = m.command[] { } else if let "USER" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
USER(m.args[0][], m.args[1][], m.suffix.as_ref().unwrap()[]) USER(m.args[0][], m.args[1][], suffix[])
} else { },
None => {
if m.args.len() != 3 { return Err(invalid_input()) } if m.args.len() != 3 { return Err(invalid_input()) }
USER(m.args[0][], m.args[1][], m.args[2][]) USER(m.args[0][], m.args[1][], m.args[2][])
} }
}
} else if let "OPER" = m.command[] { } else if let "OPER" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
OPER(m.args[0][], m.suffix.as_ref().unwrap()[]) OPER(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
OPER(m.args[0][], m.args[1][]) OPER(m.args[0][], m.args[1][])
} }
}
} else if let "MODE" = m.command[] { } else if let "MODE" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
MODE(m.args[0][], m.args[1][], Some(m.suffix.as_ref().unwrap()[])) MODE(m.args[0][], m.args[1][], Some(suffix[]))
} else if m.args.len() == 3 { }
None => if m.args.len() == 3 {
MODE(m.args[0][], m.args[1][], Some(m.args[2][])) MODE(m.args[0][], m.args[1][], Some(m.args[2][]))
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
MODE(m.args[0][], m.args[1][], None) MODE(m.args[0][], m.args[1][], None)
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "SERVICE" = m.command[] { } else if let "SERVICE" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 5 { return Err(invalid_input()) } if m.args.len() != 5 { return Err(invalid_input()) }
SERVICE(m.args[0][], m.args[1][], m.args[2][], m.args[3][], m.args[4][], m.suffix.as_ref().unwrap()[]) SERVICE(m.args[0][], m.args[1][], m.args[2][], m.args[3][], m.args[4][], suffix[])
} else { },
None => {
if m.args.len() != 6 { return Err(invalid_input()) } if m.args.len() != 6 { return Err(invalid_input()) }
SERVICE(m.args[0][], m.args[1][], m.args[2][], m.args[3][], m.args[4][], m.args[5][]) SERVICE(m.args[0][], m.args[1][], m.args[2][], m.args[3][], m.args[4][], m.args[5][])
} }
}
} else if let "QUIT" = m.command[] { } else if let "QUIT" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
QUIT(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => QUIT(Some(suffix[])),
} else { None => QUIT(None)
QUIT(None)
} }
} else if let "SQUIT" = m.command[] { } else if let "SQUIT" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
SQUIT(m.args[0][], m.suffix.as_ref().unwrap()[]) SQUIT(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
SQUIT(m.args[0][], m.args[1][]) SQUIT(m.args[0][], m.args[1][])
} }
}
} else if let "JOIN" = m.command[] { } else if let "JOIN" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
JOIN(m.suffix.as_ref().unwrap()[], None) JOIN(suffix[], None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
JOIN(m.args[0][], Some(m.suffix.as_ref().unwrap()[])) JOIN(m.args[0][], Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
JOIN(m.args[0][], None) JOIN(m.args[0][], None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
JOIN(m.args[0][], Some(m.args[1][])) JOIN(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "PART" = m.command[] { } else if let "PART" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
PART(m.suffix.as_ref().unwrap()[], None) PART(suffix[], None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
PART(m.args[0][], Some(m.suffix.as_ref().unwrap()[])) PART(m.args[0][], Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
PART(m.args[0][], None) PART(m.args[0][], None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
PART(m.args[0][], Some(m.args[1][])) PART(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "TOPIC" = m.command[] { } else if let "TOPIC" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
TOPIC(m.suffix.as_ref().unwrap()[], None) TOPIC(suffix[], None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
TOPIC(m.args[0][], Some(m.suffix.as_ref().unwrap()[])) TOPIC(m.args[0][], Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
TOPIC(m.args[0][], None) TOPIC(m.args[0][], None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
TOPIC(m.args[0][], Some(m.args[1][])) TOPIC(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "NAMES" = m.command[] { } else if let "NAMES" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
NAMES(Some(m.suffix.as_ref().unwrap()[]), None) NAMES(Some(suffix[]), None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
NAMES(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[])) NAMES(Some(m.args[0][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
NAMES(None, None) NAMES(None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
NAMES(Some(m.args[0][]), None) NAMES(Some(m.args[0][]), None)
@ -375,16 +384,17 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "LIST" = m.command[] { } else if let "LIST" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
LIST(Some(m.suffix.as_ref().unwrap()[]), None) LIST(Some(suffix[]), None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
LIST(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[])) LIST(Some(m.args[0][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
LIST(None, None) LIST(None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
LIST(Some(m.args[0][]), None) LIST(Some(m.args[0][]), None)
@ -393,40 +403,61 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "INVITE" = m.command[] { } else if let "INVITE" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
INVITE(m.args[0][], m.suffix.as_ref().unwrap()[]) INVITE(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
INVITE(m.args[0][], m.args[1][]) INVITE(m.args[0][], m.args[1][])
} }
}
} else if let "KICK" = m.command[] { } else if let "KICK" = m.command[] {
match m.suffix {
Some(ref suffix) => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
KICK(m.args[0][], m.args[1][], m.suffix.as_ref().map(|s| s[])) KICK(m.args[0][], m.args[1][], Some(suffix[]))
},
None => {
if m.args.len() != 2 { return Err(invalid_input()) }
KICK(m.args[0][], m.args[1][], None)
},
}
} else if let "PRIVMSG" = m.command[] { } else if let "PRIVMSG" = m.command[] {
if !m.suffix.is_some() || m.args.len() != 1 { return Err(invalid_input()) } match m.suffix {
PRIVMSG(m.args[0][], m.suffix.as_ref().unwrap()[]) Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) }
PRIVMSG(m.args[0][], suffix[])
},
None => return Err(invalid_input())
}
} else if let "NOTICE" = m.command[] { } else if let "NOTICE" = m.command[] {
if !m.suffix.is_some() || m.args.len() != 1 { return Err(invalid_input()) } match m.suffix {
NOTICE(m.args[0][], m.suffix.as_ref().unwrap()[]) Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) }
NOTICE(m.args[0][], suffix[])
},
None => return Err(invalid_input())
}
} else if let "MOTD" = m.command[] { } else if let "MOTD" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
MOTD(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => MOTD(Some(suffix[])),
} else { None => MOTD(None)
MOTD(None)
} }
} else if let "LUSERS" = m.command[] { } else if let "LUSERS" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
LUSERS(Some(m.suffix.as_ref().unwrap()[]), None) LUSERS(Some(suffix[]), None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
LUSERS(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[])) LUSERS(Some(m.args[0][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
LUSERS(None, None) LUSERS(None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
LUSERS(Some(m.args[0][]), None) LUSERS(Some(m.args[0][]), None)
@ -435,23 +466,23 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "VERSION" = m.command[] { } else if let "VERSION" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
VERSION(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => VERSION(Some(suffix[])),
} else { None => VERSION(None)
VERSION(None)
} }
} else if let "STATS" = m.command[] { } else if let "STATS" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
STATS(Some(m.suffix.as_ref().unwrap()[]), None) STATS(Some(suffix[]), None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
STATS(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[])) STATS(Some(m.args[0][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
STATS(None, None) STATS(None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
STATS(Some(m.args[0][]), None) STATS(Some(m.args[0][]), None)
@ -460,61 +491,67 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "LINKS" = m.command[] { } else if let "LINKS" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
LINKS(None, Some(m.suffix.as_ref().unwrap()[])) LINKS(None, Some(suffix[]))
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
LINKS(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[])) LINKS(Some(m.args[0][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
LINKS(None, None) LINKS(None, None)
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "TIME" = m.command[] { } else if let "TIME" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
TIME(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => TIME(Some(suffix[])),
} else { None => TIME(None)
TIME(None)
} }
} else if let "CONNECT" = m.command[] { } else if let "CONNECT" = m.command[] {
match m.suffix {
Some(ref suffix) => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
CONNECT(m.args[0][], m.args[1][], m.suffix.as_ref().map(|s| s[])) CONNECT(m.args[0][], m.args[1][], Some(suffix[]))
},
None => {
if m.args.len() != 2 { return Err(invalid_input()) }
CONNECT(m.args[0][], m.args[1][], None)
}
}
} else if let "TRACE" = m.command[] { } else if let "TRACE" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
TRACE(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => TRACE(Some(suffix[])),
} else { None => TRACE(None)
TRACE(None)
} }
} else if let "ADMIN" = m.command[] { } else if let "ADMIN" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
TIME(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => ADMIN(Some(suffix[])),
} else { None => ADMIN(None)
TIME(None)
} }
} else if let "INFO" = m.command[] { } else if let "INFO" = m.command[] {
if m.args.len() != 0 { return Err(invalid_input()) } if m.args.len() != 0 { return Err(invalid_input()) }
if m.suffix.is_some() { match m.suffix {
TIME(Some(m.suffix.as_ref().unwrap()[])) Some(ref suffix) => INFO(Some(suffix[])),
} else { None => INFO(None)
TIME(None)
} }
} else if let "SERVLIST" = m.command[] { } else if let "SERVLIST" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
SERVLIST(Some(m.suffix.as_ref().unwrap()[]), None) SERVLIST(Some(suffix[]), None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
SERVLIST(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[])) SERVLIST(Some(m.args[0][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
SERVLIST(None, None) SERVLIST(None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
SERVLIST(Some(m.args[0][]), None) SERVLIST(Some(m.args[0][]), None)
@ -523,24 +560,28 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "SQUERY" = m.command[] { } else if let "SQUERY" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
SQUERY(m.args[0][], m.suffix.as_ref().unwrap()[]) SQUERY(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
SQUERY(m.args[0][], m.args[1][]) SQUERY(m.args[0][], m.args[1][])
} }
}
} else if let "WHO" = m.command[] { } else if let "WHO" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
WHO(Some(m.suffix.as_ref().unwrap()[]), None) WHO(Some(suffix[]), None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
WHO(Some(m.args[0][]), Some(m.suffix.as_ref().unwrap()[] == "o")) WHO(Some(m.args[0][]), Some(suffix[] == "o"))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 0 { None => if m.args.len() == 0 {
WHO(None, None) WHO(None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
WHO(Some(m.args[0][]), None) WHO(Some(m.args[0][]), None)
@ -549,34 +590,36 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "WHOIS" = m.command[] { } else if let "WHOIS" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
WHOIS(None, m.suffix.as_ref().unwrap()[]) WHOIS(None, suffix[])
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
WHOIS(Some(m.args[0][]), m.suffix.as_ref().unwrap()[]) WHOIS(Some(m.args[0][]), suffix[])
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
WHOIS(None, m.args[0][]) WHOIS(None, m.args[0][])
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
WHOIS(Some(m.args[0][]), m.args[1][]) WHOIS(Some(m.args[0][]), m.args[1][])
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "WHOWAS" = m.command[] { } else if let "WHOWAS" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
WHOWAS(m.suffix.as_ref().unwrap()[], None, None) WHOWAS(suffix[], None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
WHOWAS(m.args[0][], None, Some(m.suffix.as_ref().unwrap()[])) WHOWAS(m.args[0][], None, Some(suffix[]))
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
WHOWAS(m.args[0][], Some(m.args[1][]), Some(m.suffix.as_ref().unwrap()[])) WHOWAS(m.args[0][], Some(m.args[1][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
WHOWAS(m.args[0][], None, None) WHOWAS(m.args[0][], None, None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
WHOWAS(m.args[0][], None, Some(m.args[1][])) WHOWAS(m.args[0][], None, Some(m.args[1][]))
@ -585,57 +628,69 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "KILL" = m.command[] { } else if let "KILL" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
KILL(m.args[0][], m.suffix.as_ref().unwrap()[]) KILL(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
KILL(m.args[0][], m.args[1][]) KILL(m.args[0][], m.args[1][])
} }
}
} else if let "PING" = m.command[] { } else if let "PING" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
PING(m.suffix.as_ref().unwrap()[], None) PING(suffix[], None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
PING(m.args[0][], Some(m.suffix.as_ref().unwrap()[])) PING(m.args[0][], Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
PING(m.args[0][], None) PING(m.args[0][], None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
PING(m.args[0][], Some(m.args[1][])) PING(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "PONG" = m.command[] { } else if let "PONG" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
PONG(m.suffix.as_ref().unwrap()[], None) PONG(suffix[], None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
PONG(m.args[0][], Some(m.suffix.as_ref().unwrap()[])) PONG(m.args[0][], Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
PONG(m.args[0][], None) PONG(m.args[0][], None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
PONG(m.args[0][], Some(m.args[1][])) PONG(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "ERROR" = m.command[] { } else if let "ERROR" = m.command[] {
if m.suffix.is_some() && m.args.len() == 0 { match m.suffix {
ERROR(m.suffix.as_ref().unwrap()[]) Some(ref suffix) => if m.args.len() == 0 {
ERROR(suffix[])
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
},
None => return Err(invalid_input())
} }
} else if let "AWAY" = m.command[] { } else if let "AWAY" = m.command[] {
if m.args.len() == 0 { match m.suffix {
AWAY(m.suffix.as_ref().map(|s| s[])) Some(ref suffix) => if m.args.len() == 0 {
AWAY(Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
},
None => return Err(invalid_input())
} }
} else if let "REHASH" = m.command[] { } else if let "REHASH" = m.command[] {
if m.args.len() == 0 { if m.args.len() == 0 {
@ -656,17 +711,17 @@ impl<'a> Command<'a> {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if let "SUMMON" = m.command[] { } else if let "SUMMON" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 0 { Some(ref suffix) => if m.args.len() == 0 {
SUMMON(m.suffix.as_ref().unwrap()[], None, None) SUMMON(suffix[], None, None)
} else if m.args.len() == 1 { } else if m.args.len() == 1 {
SUMMON(m.args[0][], Some(m.suffix.as_ref().unwrap()[]), None) SUMMON(m.args[0][], Some(suffix[]), None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
SUMMON(m.args[0][], Some(m.args[1][]), Some(m.suffix.as_ref().unwrap()[])) SUMMON(m.args[0][], Some(m.args[1][]), Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 1 { None => if m.args.len() == 1 {
SUMMON(m.args[0][], None, None) SUMMON(m.args[0][], None, None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
SUMMON(m.args[0][], Some(m.args[1][]), None) SUMMON(m.args[0][], Some(m.args[1][]), None)
@ -675,21 +730,28 @@ impl<'a> Command<'a> {
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "USERS" = m.command[] { } else if let "USERS" = m.command[] {
if m.args.len() == 0 { match m.suffix {
USERS(m.suffix.as_ref().map(|s| s[])) Some(ref suffix) => {
} else if m.args.len() == 1 { if m.args.len() != 0 { return Err(invalid_input()) }
USERS(Some(suffix[]))
},
None => {
if m.args.len() != 1 { return Err(invalid_input()) }
USERS(Some(m.args[0][])) USERS(Some(m.args[0][]))
} else { }
return Err(invalid_input())
} }
} else if let "WALLOPS" = m.command[] { } else if let "WALLOPS" = m.command[] {
if m.suffix.is_some() && m.args.len() == 0 { match m.suffix {
WALLOPS(m.suffix.as_ref().unwrap()[]) Some(ref suffix) => {
} else if m.args.len() == 1 { if m.args.len() != 0 { return Err(invalid_input()) }
WALLOPS(suffix[])
},
None => {
if m.args.len() != 1 { return Err(invalid_input()) }
WALLOPS(m.args[0][]) WALLOPS(m.args[0][])
} else { }
return Err(invalid_input())
} }
} else if let "USERHOST" = m.command[] { } else if let "USERHOST" = m.command[] {
if m.suffix.is_none() { if m.suffix.is_none() {
@ -704,53 +766,66 @@ impl<'a> Command<'a> {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if let "SAJOIN" = m.command[] { } else if let "SAJOIN" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
SAJOIN(m.args[0][], m.suffix.as_ref().unwrap()[]) SAJOIN(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
SAJOIN(m.args[0][], m.args[1][]) SAJOIN(m.args[0][], m.args[1][])
} }
}
} else if let "SAMODE" = m.command[] { } else if let "SAMODE" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() == 1 { Some(ref suffix) => if m.args.len() == 1 {
SAMODE(m.args[0][], m.suffix.as_ref().unwrap()[], None) SAMODE(m.args[0][], suffix[], None)
} else if m.args.len() == 2 { } else if m.args.len() == 2 {
SAMODE(m.args[0][], m.args[1][], Some(m.suffix.as_ref().unwrap()[])) SAMODE(m.args[0][], m.args[1][], Some(suffix[]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} },
} else if m.args.len() == 2 { None => if m.args.len() == 2 {
SAMODE(m.args[0][], m.args[1][], None) SAMODE(m.args[0][], m.args[1][], None)
} else if m.args.len() == 3 { } else if m.args.len() == 3 {
SAMODE(m.args[0][], m.args[1][], Some(m.args[2][])) SAMODE(m.args[0][], m.args[1][], Some(m.args[2][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
}
} else if let "SANICK" = m.command[] { } else if let "SANICK" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
SANICK(m.args[0][], m.suffix.as_ref().unwrap()[]) SANICK(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
SANICK(m.args[0][], m.args[1][]) SANICK(m.args[0][], m.args[1][])
} }
}
} else if let "SAPART" = m.command[] { } else if let "SAPART" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
SAPART(m.args[0][], m.suffix.as_ref().unwrap()[]) SAPART(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
SAPART(m.args[0][], m.args[1][]) SAPART(m.args[0][], m.args[1][])
} }
}
} else if let "SAQUIT" = m.command[] { } else if let "SAQUIT" = m.command[] {
if m.suffix.is_some() { match m.suffix {
Some(ref suffix) => {
if m.args.len() != 1 { return Err(invalid_input()) } if m.args.len() != 1 { return Err(invalid_input()) }
SAQUIT(m.args[0][], m.suffix.as_ref().unwrap()[]) SAQUIT(m.args[0][], suffix[])
} else { },
None => {
if m.args.len() != 2 { return Err(invalid_input()) } if m.args.len() != 2 { return Err(invalid_input()) }
SAQUIT(m.args[0][], m.args[1][]) SAQUIT(m.args[0][], m.args[1][])
} }
}
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
}) })