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,413 +229,468 @@ 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()) } PASS(suffix[])
PASS(suffix[]) },
}, None => {
None => { if m.args.len() != 1 { return Err(invalid_input()) }
if m.args.len() != 1 { return Err(invalid_input()) } 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 {
if m.args.len() != 0 { return Err(invalid_input()) } Some(ref suffix) => {
NICK(m.suffix.as_ref().unwrap()[]) if m.args.len() != 0 { return Err(invalid_input()) }
} else { NICK(suffix[])
if m.args.len() != 1 { return Err(invalid_input()) } },
NICK(m.args[0][]) None => {
if m.args.len() != 1 { return Err(invalid_input()) }
NICK(m.args[0][])
}
} }
} else if let "USER" = m.command[] { } else if let "USER" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() != 2 { return Err(invalid_input()) } Some(ref suffix) => {
USER(m.args[0][], m.args[1][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 2 { return Err(invalid_input()) }
} else { USER(m.args[0][], m.args[1][], suffix[])
if m.args.len() != 3 { return Err(invalid_input()) } },
USER(m.args[0][], m.args[1][], m.args[2][]) None => {
if m.args.len() != 3 { return Err(invalid_input()) }
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 {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
OPER(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { OPER(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
OPER(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
if m.args.len() != 2 { return Err(invalid_input()) } Some(ref suffix) => {
MODE(m.args[0][], m.args[1][], Some(m.suffix.as_ref().unwrap()[])) if m.args.len() != 2 { return Err(invalid_input()) }
} else if m.args.len() == 3 { MODE(m.args[0][], m.args[1][], Some(suffix[]))
MODE(m.args[0][], m.args[1][], Some(m.args[2][])) }
} else if m.args.len() == 2 { None => if m.args.len() == 3 {
MODE(m.args[0][], m.args[1][], None) MODE(m.args[0][], m.args[1][], Some(m.args[2][]))
} else { } else if m.args.len() == 2 {
return Err(invalid_input()) MODE(m.args[0][], m.args[1][], None)
} else {
return Err(invalid_input())
}
} }
} else if let "SERVICE" = m.command[] { } else if let "SERVICE" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() != 5 { return Err(invalid_input()) } Some(ref suffix) => {
SERVICE(m.args[0][], m.args[1][], m.args[2][], m.args[3][], m.args[4][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 5 { return Err(invalid_input()) }
} else { SERVICE(m.args[0][], m.args[1][], m.args[2][], m.args[3][], m.args[4][], suffix[])
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][]) None => {
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][])
}
} }
} 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 {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
SQUIT(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { SQUIT(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
SQUIT(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
JOIN(m.args[0][], None)
} else if m.args.len() == 2 {
JOIN(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
JOIN(m.args[0][], None)
} else if m.args.len() == 2 {
JOIN(m.args[0][], Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
PART(m.args[0][], None)
} else if m.args.len() == 2 {
PART(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
PART(m.args[0][], None)
} else if m.args.len() == 2 {
PART(m.args[0][], Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
TOPIC(m.args[0][], None)
} else if m.args.len() == 2 {
TOPIC(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
TOPIC(m.args[0][], None)
} else if m.args.len() == 2 {
TOPIC(m.args[0][], Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
NAMES(None, None)
} else if m.args.len() == 1 {
NAMES(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
NAMES(Some(m.args[0][]), Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
NAMES(None, None)
} else if m.args.len() == 1 {
NAMES(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
NAMES(Some(m.args[0][]), Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
LIST(None, None)
} else if m.args.len() == 1 {
LIST(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
LIST(Some(m.args[0][]), Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
LIST(None, None)
} else if m.args.len() == 1 {
LIST(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
LIST(Some(m.args[0][]), Some(m.args[1][]))
} else {
return Err(invalid_input())
} }
} else if let "INVITE" = m.command[] { } else if let "INVITE" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
INVITE(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { INVITE(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
INVITE(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
INVITE(m.args[0][], m.args[1][])
}
} }
} else if let "KICK" = m.command[] { } else if let "KICK" = m.command[] {
if m.args.len() != 2 { return Err(invalid_input()) } match m.suffix {
KICK(m.args[0][], m.args[1][], m.suffix.as_ref().map(|s| s[])) Some(ref suffix) => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
LUSERS(None, None)
} else if m.args.len() == 1 {
LUSERS(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
LUSERS(Some(m.args[0][]), Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
LUSERS(None, None)
} else if m.args.len() == 1 {
LUSERS(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
LUSERS(Some(m.args[0][]), Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
STATS(None, None)
} else if m.args.len() == 1 {
STATS(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
STATS(Some(m.args[0][]), Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
STATS(None, None)
} else if m.args.len() == 1 {
STATS(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
STATS(Some(m.args[0][]), Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
LINKS(None, None)
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
LINKS(None, None)
} else {
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[] {
if m.args.len() != 2 { return Err(invalid_input()) } match m.suffix {
CONNECT(m.args[0][], m.args[1][], m.suffix.as_ref().map(|s| s[])) Some(ref suffix) => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
SERVLIST(None, None)
} else if m.args.len() == 1 {
SERVLIST(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
SERVLIST(Some(m.args[0][]), Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
SERVLIST(None, None)
} else if m.args.len() == 1 {
SERVLIST(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
SERVLIST(Some(m.args[0][]), Some(m.args[1][]))
} else {
return Err(invalid_input())
} }
} else if let "SQUERY" = m.command[] { } else if let "SQUERY" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
SQUERY(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { SQUERY(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
SQUERY(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
return Err(invalid_input())
},
None => if m.args.len() == 0 {
WHO(None, None)
} else if m.args.len() == 1 {
WHO(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
WHO(Some(m.args[0][]), Some(m.args[1][] == "o"))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 0 {
WHO(None, None)
} else if m.args.len() == 1 {
WHO(Some(m.args[0][]), None)
} else if m.args.len() == 2 {
WHO(Some(m.args[0][]), Some(m.args[1][] == "o"))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
WHOIS(None, m.args[0][])
} else if m.args.len() == 2 {
WHOIS(Some(m.args[0][]), m.args[1][])
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
WHOIS(None, m.args[0][])
} else if m.args.len() == 2 {
WHOIS(Some(m.args[0][]), m.args[1][])
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
WHOWAS(m.args[0][], None, None)
} else if m.args.len() == 2 {
WHOWAS(m.args[0][], None, Some(m.args[1][]))
} else if m.args.len() == 3 {
WHOWAS(m.args[0][], Some(m.args[1][]), Some(m.args[2][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
WHOWAS(m.args[0][], None, None)
} else if m.args.len() == 2 {
WHOWAS(m.args[0][], None, Some(m.args[1][]))
} else if m.args.len() == 3 {
WHOWAS(m.args[0][], Some(m.args[1][]), Some(m.args[2][]))
} else {
return Err(invalid_input())
} }
} else if let "KILL" = m.command[] { } else if let "KILL" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
KILL(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { KILL(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
KILL(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
PING(m.args[0][], None)
} else if m.args.len() == 2 {
PING(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
PING(m.args[0][], None)
} else if m.args.len() == 2 {
PING(m.args[0][], Some(m.args[1][]))
} else {
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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
PONG(m.args[0][], None)
} else if m.args.len() == 2 {
PONG(m.args[0][], Some(m.args[1][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
PONG(m.args[0][], None)
} else if m.args.len() == 2 {
PONG(m.args[0][], Some(m.args[1][]))
} else {
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 {
} else { ERROR(suffix[])
return Err(invalid_input()) } else {
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 {
} else { AWAY(Some(suffix[]))
return Err(invalid_input()) } else {
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,40 +711,47 @@ 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 {
return Err(invalid_input())
},
None => if m.args.len() == 1 {
SUMMON(m.args[0][], None, None)
} else if m.args.len() == 2 {
SUMMON(m.args[0][], Some(m.args[1][]), None)
} else if m.args.len() == 3 {
SUMMON(m.args[0][], Some(m.args[1][]), Some(m.args[2][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 1 {
SUMMON(m.args[0][], None, None)
} else if m.args.len() == 2 {
SUMMON(m.args[0][], Some(m.args[1][]), None)
} else if m.args.len() == 3 {
SUMMON(m.args[0][], Some(m.args[1][]), Some(m.args[2][]))
} else {
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(m.args[0][])) USERS(Some(suffix[]))
} else { },
return Err(invalid_input()) None => {
if m.args.len() != 1 { return Err(invalid_input()) }
USERS(Some(m.args[0][]))
}
} }
} 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(m.args[0][]) WALLOPS(suffix[])
} else { },
return Err(invalid_input()) None => {
if m.args.len() != 1 { return Err(invalid_input()) }
WALLOPS(m.args[0][])
}
} }
} else if let "USERHOST" = m.command[] { } else if let "USERHOST" = m.command[] {
if m.suffix.is_none() { if m.suffix.is_none() {
@ -704,52 +766,65 @@ 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 {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
SAJOIN(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { SAJOIN(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
SAJOIN(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
return Err(invalid_input())
},
None => if m.args.len() == 2 {
SAMODE(m.args[0][], m.args[1][], None)
} else if m.args.len() == 3 {
SAMODE(m.args[0][], m.args[1][], Some(m.args[2][]))
} else { } else {
return Err(invalid_input()) return Err(invalid_input())
} }
} else if m.args.len() == 2 {
SAMODE(m.args[0][], m.args[1][], None)
} else if m.args.len() == 3 {
SAMODE(m.args[0][], m.args[1][], Some(m.args[2][]))
} else {
return Err(invalid_input())
} }
} else if let "SANICK" = m.command[] { } else if let "SANICK" = m.command[] {
if m.suffix.is_some() { match m.suffix {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
SANICK(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { SANICK(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
SANICK(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
SAPART(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { SAPART(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
SAPART(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
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 {
if m.args.len() != 1 { return Err(invalid_input()) } Some(ref suffix) => {
SAQUIT(m.args[0][], m.suffix.as_ref().unwrap()[]) if m.args.len() != 1 { return Err(invalid_input()) }
} else { SAQUIT(m.args[0][], suffix[])
if m.args.len() != 2 { return Err(invalid_input()) } },
SAQUIT(m.args[0][], m.args[1][]) None => {
if m.args.len() != 2 { return Err(invalid_input()) }
SAQUIT(m.args[0][], m.args[1][])
}
} }
} else { } else {
return Err(invalid_input()) return Err(invalid_input())