Removed trailing whitespace.
This commit is contained in:
parent
a5306f8391
commit
05186cf670
15 changed files with 52 additions and 52 deletions
|
@ -13,20 +13,20 @@ fn main() {
|
||||||
.. Default::default()
|
.. Default::default()
|
||||||
};
|
};
|
||||||
let server = Arc::new(IrcServer::from_config(config).unwrap());
|
let server = Arc::new(IrcServer::from_config(config).unwrap());
|
||||||
// FIXME: if set_keepalive is stabilized, this can be readded.
|
// FIXME: if set_keepalive is stabilized, this can be readded.
|
||||||
// server.conn().set_keepalive(Some(5)).unwrap();
|
// server.conn().set_keepalive(Some(5)).unwrap();
|
||||||
let server = server.clone();
|
let server = server.clone();
|
||||||
let _ = spawn(move || {
|
let _ = spawn(move || {
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
loop {
|
loop {
|
||||||
let mut quit = false;
|
let mut quit = false;
|
||||||
for msg in server.iter() {
|
for msg in server.iter() {
|
||||||
match msg {
|
match msg {
|
||||||
Ok(msg) => {
|
Ok(msg) => {
|
||||||
print!("{}", msg.into_string());
|
print!("{}", msg.into_string());
|
||||||
match (&msg).into() {
|
match (&msg).into() {
|
||||||
Ok(Command::PRIVMSG(_, msg)) => if msg.contains("bye") {
|
Ok(Command::PRIVMSG(_, msg)) => if msg.contains("bye") {
|
||||||
server.send_quit("").unwrap()
|
server.send_quit("").unwrap()
|
||||||
},
|
},
|
||||||
Ok(Command::ERROR(ref msg)) if msg.contains("Quit") => quit = true,
|
Ok(Command::ERROR(ref msg)) if msg.contains("Quit") => quit = true,
|
||||||
_ => (),
|
_ => (),
|
||||||
|
@ -39,5 +39,5 @@ fn main() {
|
||||||
server.reconnect().unwrap();
|
server.reconnect().unwrap();
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
}
|
}
|
||||||
}).join();
|
}).join();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ fn main() {
|
||||||
let server = Arc::new(IrcServer::from_config(config).unwrap());
|
let server = Arc::new(IrcServer::from_config(config).unwrap());
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
let server = server.clone();
|
let server = server.clone();
|
||||||
let _ = spawn(move || {
|
let _ = spawn(move || {
|
||||||
for msg in server.iter() {
|
for msg in server.iter() {
|
||||||
print!("{}", msg.unwrap().into_string());
|
print!("{}", msg.unwrap().into_string());
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ fn main() {
|
||||||
channels: Some(vec![format!("#vana")]),
|
channels: Some(vec![format!("#vana")]),
|
||||||
.. Default::default()
|
.. Default::default()
|
||||||
};
|
};
|
||||||
let server = IrcServer::from_config(config).unwrap();
|
let server = IrcServer::from_config(config).unwrap();
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
for message in server.iter() {
|
for message in server.iter() {
|
||||||
let message = message.unwrap(); // We'll just panic if there's an error.
|
let message = message.unwrap(); // We'll just panic if there's an error.
|
||||||
|
|
|
@ -11,7 +11,7 @@ fn main() {
|
||||||
channels: Some(vec![format!("#vana")]),
|
channels: Some(vec![format!("#vana")]),
|
||||||
.. Default::default()
|
.. Default::default()
|
||||||
};
|
};
|
||||||
let server = IrcServer::from_config(config).unwrap();
|
let server = IrcServer::from_config(config).unwrap();
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
for command in server.iter_cmd() {
|
for command in server.iter_cmd() {
|
||||||
// Use of unwrap() on the results of iter_cmd() is discouraged since response codes will be
|
// Use of unwrap() on the results of iter_cmd() is discouraged since response codes will be
|
||||||
|
|
|
@ -11,13 +11,13 @@ fn main() {
|
||||||
server: Some(format!("irc.fyrechat.net")),
|
server: Some(format!("irc.fyrechat.net")),
|
||||||
channels: Some(vec![format!("#vana")]),
|
channels: Some(vec![format!("#vana")]),
|
||||||
.. Default::default()
|
.. Default::default()
|
||||||
};
|
};
|
||||||
let server = Arc::new(IrcServer::from_config(config).unwrap());
|
let server = Arc::new(IrcServer::from_config(config).unwrap());
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
let server2 = server.clone();
|
let server2 = server.clone();
|
||||||
// Let's set up a loop that just prints the messages.
|
// Let's set up a loop that just prints the messages.
|
||||||
spawn(move || {
|
spawn(move || {
|
||||||
server2.iter().map(|m| print!("{}", m.unwrap().into_string())).count();
|
server2.iter().map(|m| print!("{}", m.unwrap().into_string())).count();
|
||||||
});
|
});
|
||||||
loop {
|
loop {
|
||||||
server.send_privmsg("#vana", "TWEET TWEET").unwrap();
|
server.send_privmsg("#vana", "TWEET TWEET").unwrap();
|
||||||
|
|
|
@ -79,7 +79,7 @@ impl Connection<BufReader<NetStream>, BufWriter<NetStream>> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
FIXME: removed until set_keepalive is stabilized.
|
FIXME: removed until set_keepalive is stabilized.
|
||||||
/// Sets the keepalive for the network stream.
|
/// Sets the keepalive for the network stream.
|
||||||
|
@ -120,7 +120,7 @@ impl<T: IrcRead, U: IrcWrite> Connection<T, U> {
|
||||||
let msg: Message = to_msg.into();
|
let msg: Message = to_msg.into();
|
||||||
let data = match encoding.encode(&msg.into_string(), EncoderTrap::Replace) {
|
let data = match encoding.encode(&msg.into_string(), EncoderTrap::Replace) {
|
||||||
Ok(data) => data,
|
Ok(data) => data,
|
||||||
Err(data) => return Err(Error::new(ErrorKind::InvalidInput,
|
Err(data) => return Err(Error::new(ErrorKind::InvalidInput,
|
||||||
&format!("Failed to encode {} as {}.", data, encoding.name())[..]
|
&format!("Failed to encode {} as {}.", data, encoding.name())[..]
|
||||||
))
|
))
|
||||||
};
|
};
|
||||||
|
@ -129,7 +129,7 @@ impl<T: IrcRead, U: IrcWrite> Connection<T, U> {
|
||||||
writer.flush()
|
writer.flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sends a message over this connection.
|
/// Sends a message over this connection.
|
||||||
#[cfg(not(feature = "encode"))]
|
#[cfg(not(feature = "encode"))]
|
||||||
pub fn send<M: Into<Message>>(&self, to_msg: M) -> Result<()> {
|
pub fn send<M: Into<Message>>(&self, to_msg: M) -> Result<()> {
|
||||||
let mut writer = self.writer.lock().unwrap();
|
let mut writer = self.writer.lock().unwrap();
|
||||||
|
@ -152,7 +152,7 @@ impl<T: IrcRead, U: IrcWrite> Connection<T, U> {
|
||||||
match encoding.decode(&buf, DecoderTrap::Replace) {
|
match encoding.decode(&buf, DecoderTrap::Replace) {
|
||||||
_ if buf.is_empty() => Err(Error::new(ErrorKind::Other, "EOF")),
|
_ if buf.is_empty() => Err(Error::new(ErrorKind::Other, "EOF")),
|
||||||
Ok(data) => Ok(data),
|
Ok(data) => Ok(data),
|
||||||
Err(data) => return Err(Error::new(ErrorKind::InvalidInput,
|
Err(data) => return Err(Error::new(ErrorKind::InvalidInput,
|
||||||
&format!("Failed to decode {} as {}.", data, encoding.name())[..]
|
&format!("Failed to decode {} as {}.", data, encoding.name())[..]
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ impl<T: IrcRead, U: IrcWrite> Connection<T, U> {
|
||||||
fn ssl_to_io<T>(res: StdResult<T, SslError>) -> Result<T> {
|
fn ssl_to_io<T>(res: StdResult<T, SslError>) -> Result<T> {
|
||||||
match res {
|
match res {
|
||||||
Ok(x) => Ok(x),
|
Ok(x) => Ok(x),
|
||||||
Err(e) => Err(Error::new(ErrorKind::Other,
|
Err(e) => Err(Error::new(ErrorKind::Other,
|
||||||
&format!("An SSL error occurred. ({})", e.description())[..]
|
&format!("An SSL error occurred. ({})", e.description())[..]
|
||||||
)),
|
)),
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ mod test {
|
||||||
let data = String::from_utf8(conn.writer().to_vec()).unwrap();
|
let data = String::from_utf8(conn.writer().to_vec()).unwrap();
|
||||||
assert_eq!(&data[..], "PRIVMSG test :Testing!\r\n");
|
assert_eq!(&data[..], "PRIVMSG test :Testing!\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(feature = "encode"))]
|
#[cfg(not(feature = "encode"))]
|
||||||
fn send_str() {
|
fn send_str() {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//! Enumeration of all supported IRCv3 capability extensions.
|
//! Enumeration of all supported IRCv3 capability extensions.
|
||||||
|
|
||||||
/// List of all supported IRCv3 capability extensions from the
|
/// List of all supported IRCv3 capability extensions from the
|
||||||
/// [IRCv3 specifications](http://ircv3.net/irc/).
|
/// [IRCv3 specifications](http://ircv3.net/irc/).
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum Capability {
|
pub enum Capability {
|
||||||
/// [multi-prefix](http://ircv3.net/specs/extensions/multi-prefix-3.1.html)
|
/// [multi-prefix](http://ircv3.net/specs/extensions/multi-prefix-3.1.html)
|
||||||
|
|
|
@ -461,7 +461,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 2 {
|
} else if m.args.len() == 2 {
|
||||||
Command::JOIN(m.args[0].clone(), Some(m.args[1].clone()), None)
|
Command::JOIN(m.args[0].clone(), Some(m.args[1].clone()), None)
|
||||||
} else if m.args.len() == 3 {
|
} else if m.args.len() == 3 {
|
||||||
Command::JOIN(m.args[0].clone(), Some(m.args[1].clone()),
|
Command::JOIN(m.args[0].clone(), Some(m.args[1].clone()),
|
||||||
Some(m.args[2].clone()))
|
Some(m.args[2].clone()))
|
||||||
} else {
|
} else {
|
||||||
return Err(invalid_input())
|
return Err(invalid_input())
|
||||||
|
@ -750,7 +750,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 1 {
|
} else if m.args.len() == 1 {
|
||||||
Command::WHOWAS(m.args[0].clone(), None, Some(suffix.clone()))
|
Command::WHOWAS(m.args[0].clone(), None, Some(suffix.clone()))
|
||||||
} else if m.args.len() == 2 {
|
} else if m.args.len() == 2 {
|
||||||
Command::WHOWAS(m.args[0].clone(), Some(m.args[1].clone()),
|
Command::WHOWAS(m.args[0].clone(), Some(m.args[1].clone()),
|
||||||
Some(suffix.clone()))
|
Some(suffix.clone()))
|
||||||
} else {
|
} else {
|
||||||
return Err(invalid_input())
|
return Err(invalid_input())
|
||||||
|
@ -760,7 +760,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 2 {
|
} else if m.args.len() == 2 {
|
||||||
Command::WHOWAS(m.args[0].clone(), None, Some(m.args[1].clone()))
|
Command::WHOWAS(m.args[0].clone(), None, Some(m.args[1].clone()))
|
||||||
} else if m.args.len() == 3 {
|
} else if m.args.len() == 3 {
|
||||||
Command::WHOWAS(m.args[0].clone(), Some(m.args[1].clone()),
|
Command::WHOWAS(m.args[0].clone(), Some(m.args[1].clone()),
|
||||||
Some(m.args[2].clone()))
|
Some(m.args[2].clone()))
|
||||||
} else {
|
} else {
|
||||||
return Err(invalid_input())
|
return Err(invalid_input())
|
||||||
|
@ -854,7 +854,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 1 {
|
} else if m.args.len() == 1 {
|
||||||
Command::SUMMON(m.args[0].clone(), Some(suffix.clone()), None)
|
Command::SUMMON(m.args[0].clone(), Some(suffix.clone()), None)
|
||||||
} else if m.args.len() == 2 {
|
} else if m.args.len() == 2 {
|
||||||
Command::SUMMON(m.args[0].clone(), Some(m.args[1].clone()),
|
Command::SUMMON(m.args[0].clone(), Some(m.args[1].clone()),
|
||||||
Some(suffix.clone()))
|
Some(suffix.clone()))
|
||||||
} else {
|
} else {
|
||||||
return Err(invalid_input())
|
return Err(invalid_input())
|
||||||
|
@ -864,7 +864,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 2 {
|
} else if m.args.len() == 2 {
|
||||||
Command::SUMMON(m.args[0].clone(), Some(m.args[1].clone()), None)
|
Command::SUMMON(m.args[0].clone(), Some(m.args[1].clone()), None)
|
||||||
} else if m.args.len() == 3 {
|
} else if m.args.len() == 3 {
|
||||||
Command::SUMMON(m.args[0].clone(), Some(m.args[1].clone()),
|
Command::SUMMON(m.args[0].clone(), Some(m.args[1].clone()),
|
||||||
Some(m.args[2].clone()))
|
Some(m.args[2].clone()))
|
||||||
} else {
|
} else {
|
||||||
return Err(invalid_input())
|
return Err(invalid_input())
|
||||||
|
@ -1044,7 +1044,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 2 {
|
} else if m.args.len() == 2 {
|
||||||
if let Ok(cmd) = m.args[0].parse() {
|
if let Ok(cmd) = m.args[0].parse() {
|
||||||
match m.suffix {
|
match m.suffix {
|
||||||
Some(ref suffix) => Command::CAP(None, cmd, Some(m.args[1].clone()),
|
Some(ref suffix) => Command::CAP(None, cmd, Some(m.args[1].clone()),
|
||||||
Some(suffix.clone())),
|
Some(suffix.clone())),
|
||||||
None => Command::CAP(None, cmd, Some(m.args[1].clone()), None),
|
None => Command::CAP(None, cmd, Some(m.args[1].clone()), None),
|
||||||
}
|
}
|
||||||
|
@ -1060,7 +1060,7 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
} else if m.args.len() == 3 {
|
} else if m.args.len() == 3 {
|
||||||
if let Ok(cmd) = m.args[1].parse() {
|
if let Ok(cmd) = m.args[1].parse() {
|
||||||
match m.suffix {
|
match m.suffix {
|
||||||
Some(ref suffix) => Command::CAP(Some(m.args[0].clone()), cmd,
|
Some(ref suffix) => Command::CAP(Some(m.args[0].clone()), cmd,
|
||||||
Some(m.args[2].clone()),
|
Some(m.args[2].clone()),
|
||||||
Some(suffix.clone())),
|
Some(suffix.clone())),
|
||||||
None => Command::CAP(Some(m.args[0].clone()), cmd, Some(m.args[2].clone()),
|
None => Command::CAP(Some(m.args[0].clone()), cmd, Some(m.args[2].clone()),
|
||||||
|
|
|
@ -50,7 +50,7 @@ impl Config {
|
||||||
let mut file = try!(File::open(path));
|
let mut file = try!(File::open(path));
|
||||||
let mut data = String::new();
|
let mut data = String::new();
|
||||||
try!(file.read_to_string(&mut data));
|
try!(file.read_to_string(&mut data));
|
||||||
decode(&data[..]).map_err(|_|
|
decode(&data[..]).map_err(|_|
|
||||||
Error::new(ErrorKind::InvalidInput, "Failed to decode configuration file.")
|
Error::new(ErrorKind::InvalidInput, "Failed to decode configuration file.")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ impl Config {
|
||||||
/// Gets the channels to join upon connection.
|
/// Gets the channels to join upon connection.
|
||||||
/// This defaults to an empty vector if it's not specified.
|
/// This defaults to an empty vector if it's not specified.
|
||||||
pub fn channels(&self) -> Vec<&str> {
|
pub fn channels(&self) -> Vec<&str> {
|
||||||
self.channels.as_ref().map(|v| v.iter().map(|s| &s[..]).collect()).unwrap_or(vec![])
|
self.channels.as_ref().map(|v| v.iter().map(|s| &s[..]).collect()).unwrap_or(vec![])
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the user modes to set on connect specified in the configuration.
|
/// Gets the user modes to set on connect specified in the configuration.
|
||||||
|
|
|
@ -45,7 +45,7 @@ impl Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the nickname of the message source, if it exists.
|
/// Gets the nickname of the message source, if it exists.
|
||||||
pub fn get_source_nickname(&self) -> Option<&str> {
|
pub fn get_source_nickname(&self) -> Option<&str> {
|
||||||
self.prefix.as_ref().and_then(|s| s.find('!').map(|i| &s[..i]))
|
self.prefix.as_ref().and_then(|s| s.find('!').map(|i| &s[..i]))
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ pub enum Response {
|
||||||
RPL_ENDOFEXCEPTLIST = 349,
|
RPL_ENDOFEXCEPTLIST = 349,
|
||||||
/// 351 <version>.<debuglevel> <server> :<comments>
|
/// 351 <version>.<debuglevel> <server> :<comments>
|
||||||
RPL_VERSION = 351,
|
RPL_VERSION = 351,
|
||||||
/// 352 <channel> <user> <host> <server> <nick> ( "H" / "G" > ["*"] [ ( "@" / "+" ) ]
|
/// 352 <channel> <user> <host> <server> <nick> ( "H" / "G" > ["*"] [ ( "@" / "+" ) ]
|
||||||
/// :<hopcount> <real name>
|
/// :<hopcount> <real name>
|
||||||
RPL_WHOREPLY = 352,
|
RPL_WHOREPLY = 352,
|
||||||
/// 315 <name> :End of WHO list
|
/// 315 <name> :End of WHO list
|
||||||
|
@ -95,7 +95,7 @@ pub enum Response {
|
||||||
RPL_INFO = 371,
|
RPL_INFO = 371,
|
||||||
/// 374 :End of INFO list
|
/// 374 :End of INFO list
|
||||||
RPL_ENDOFINFO = 374,
|
RPL_ENDOFINFO = 374,
|
||||||
/// 375 :- <server> Message of the day -
|
/// 375 :- <server> Message of the day -
|
||||||
RPL_MOTDSTART = 375,
|
RPL_MOTDSTART = 375,
|
||||||
/// 372 :- <text>
|
/// 372 :- <text>
|
||||||
RPL_MOTD = 372,
|
RPL_MOTD = 372,
|
||||||
|
@ -190,7 +190,7 @@ pub enum Response {
|
||||||
/// 733 <nick> :End of MONITOR list
|
/// 733 <nick> :End of MONITOR list
|
||||||
RPL_ENDOFMONLIST = 733,
|
RPL_ENDOFMONLIST = 733,
|
||||||
|
|
||||||
|
|
||||||
// Error replies
|
// Error replies
|
||||||
/// 401 <nickname> :No such nick/channel
|
/// 401 <nickname> :No such nick/channel
|
||||||
ERR_NOSUCHNICK = 401,
|
ERR_NOSUCHNICK = 401,
|
||||||
|
@ -304,11 +304,11 @@ pub enum Response {
|
||||||
|
|
||||||
impl Response {
|
impl Response {
|
||||||
/// Gets a response from a message.
|
/// Gets a response from a message.
|
||||||
pub fn from_message(m: &Message) -> Option<Response> {
|
pub fn from_message(m: &Message) -> Option<Response> {
|
||||||
m.command.parse().ok()
|
m.command.parse().ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Determines whether or not this response is an error response.
|
/// Determines whether or not this response is an error response.
|
||||||
pub fn is_error(&self) -> bool {
|
pub fn is_error(&self) -> bool {
|
||||||
*self as u16 >= 400
|
*self as u16 >= 400
|
||||||
}
|
}
|
||||||
|
@ -320,12 +320,12 @@ impl FromStr for Response {
|
||||||
if let Ok(rc) = s.parse::<u16>() {
|
if let Ok(rc) = s.parse::<u16>() {
|
||||||
// This wall of text was brought to you by the removal of FromPrimitive.
|
// This wall of text was brought to you by the removal of FromPrimitive.
|
||||||
if (rc > 0 && rc < 5) || (rc > 200 && rc < 213) || rc == 219 || rc == 221 || rc == 234
|
if (rc > 0 && rc < 5) || (rc > 200 && rc < 213) || rc == 219 || rc == 221 || rc == 234
|
||||||
|| rc == 235 || rc == 242 || rc == 243 || (rc > 250 && rc < 260) ||
|
|| rc == 235 || rc == 242 || rc == 243 || (rc > 250 && rc < 260) ||
|
||||||
(rc > 260 && rc < 264) || (rc > 300 && rc < 307) ||
|
(rc > 260 && rc < 264) || (rc > 300 && rc < 307) ||
|
||||||
(rc > 310 && rc < 326 && rc != 320) || rc == 331 || rc == 332 || rc == 341 ||
|
(rc > 310 && rc < 326 && rc != 320) || rc == 331 || rc == 332 || rc == 341 ||
|
||||||
rc == 342 || (rc > 345 && rc < 354 && rc != 350) ||
|
rc == 342 || (rc > 345 && rc < 354 && rc != 350) ||
|
||||||
(rc > 363 && rc < 377 && rc != 370) || (rc > 380 && rc < 384) ||
|
(rc > 363 && rc < 377 && rc != 370) || (rc > 380 && rc < 384) ||
|
||||||
(rc > 390 && rc < 396) || (rc > 400 && rc < 415 && rc != 410) ||
|
(rc > 390 && rc < 396) || (rc > 400 && rc < 415 && rc != 410) ||
|
||||||
(rc > 420 && rc < 425) || (rc > 430 && rc < 434) || rc == 436 || rc == 437 ||
|
(rc > 420 && rc < 425) || (rc > 430 && rc < 434) || rc == 436 || rc == 437 ||
|
||||||
(rc > 440 && rc < 447) || rc == 451 || (rc > 460 && rc < 468) ||
|
(rc > 440 && rc < 447) || rc == 451 || (rc > 460 && rc < 468) ||
|
||||||
(rc > 470 && rc < 479) || (rc > 480 && rc < 486) || rc == 491 || rc == 501 ||
|
(rc > 470 && rc < 479) || (rc > 480 && rc < 486) || rc == 491 || rc == 501 ||
|
||||||
|
@ -336,7 +336,7 @@ impl FromStr for Response {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Err("Failed to parse response code.")
|
Err("Failed to parse response code.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ impl User {
|
||||||
nickname: nickname,
|
nickname: nickname,
|
||||||
username: username,
|
username: username,
|
||||||
hostname: hostname,
|
hostname: hostname,
|
||||||
access_levels: {
|
access_levels: {
|
||||||
let mut ranks = ranks.clone();
|
let mut ranks = ranks.clone();
|
||||||
ranks.push(AccessLevel::Member);
|
ranks.push(AccessLevel::Member);
|
||||||
ranks
|
ranks
|
||||||
|
@ -96,7 +96,7 @@ impl User {
|
||||||
/// Adds an access level to the list, and updates the highest level if necessary.
|
/// Adds an access level to the list, and updates the highest level if necessary.
|
||||||
fn add_access_level(&mut self, level: AccessLevel) {
|
fn add_access_level(&mut self, level: AccessLevel) {
|
||||||
if level > self.highest_access_level() {
|
if level > self.highest_access_level() {
|
||||||
self.highest_access_level = level
|
self.highest_access_level = level
|
||||||
}
|
}
|
||||||
self.access_levels.push(level.clone())
|
self.access_levels.push(level.clone())
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ impl PartialOrd for AccessLevel {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
&AccessLevel::Member => Some(Less),
|
&AccessLevel::Member => Some(Less),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ pub mod prelude {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use std::io::{BufReader, Empty, empty};
|
use std::io::{BufReader, Empty, empty};
|
||||||
|
|
||||||
pub fn buf_empty() -> BufReader<Empty> {
|
pub fn buf_empty() -> BufReader<Empty> {
|
||||||
BufReader::new(empty())
|
BufReader::new(empty())
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,7 +125,7 @@ impl<T: IrcRead, U: IrcWrite> IrcServer<T, U> {
|
||||||
if resp == Response::RPL_NAMREPLY {
|
if resp == Response::RPL_NAMREPLY {
|
||||||
if cfg!(not(feature = "nochanlists")) {
|
if cfg!(not(feature = "nochanlists")) {
|
||||||
if let Some(users) = msg.suffix.clone() {
|
if let Some(users) = msg.suffix.clone() {
|
||||||
if msg.args.len() == 3 {
|
if msg.args.len() == 3 {
|
||||||
// TODO: replace with slice pattern matching when/if stable
|
// TODO: replace with slice pattern matching when/if stable
|
||||||
let ref chan = msg.args[2];
|
let ref chan = msg.args[2];
|
||||||
for user in users.split(" ") {
|
for user in users.split(" ") {
|
||||||
|
@ -133,7 +133,7 @@ impl<T: IrcRead, U: IrcWrite> IrcServer<T, U> {
|
||||||
Some(vec) => { vec.push(User::new(user)); false },
|
Some(vec) => { vec.push(User::new(user)); false },
|
||||||
None => true,
|
None => true,
|
||||||
} {
|
} {
|
||||||
self.chanlists.lock().unwrap().insert(chan.clone(),
|
self.chanlists.lock().unwrap().insert(chan.clone(),
|
||||||
vec!(User::new(user)));
|
vec!(User::new(user)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ impl<T: IrcRead, U: IrcWrite> IrcServer<T, U> {
|
||||||
}
|
}
|
||||||
if &msg.command[..] == "PING" {
|
if &msg.command[..] == "PING" {
|
||||||
self.send(PONG(msg.suffix.as_ref().unwrap().to_owned(), None)).unwrap();
|
self.send(PONG(msg.suffix.as_ref().unwrap().to_owned(), None)).unwrap();
|
||||||
} else if cfg!(not(feature = "nochanlists")) &&
|
} else if cfg!(not(feature = "nochanlists")) &&
|
||||||
(&msg.command[..] == "JOIN" || &msg.command[..] == "PART") {
|
(&msg.command[..] == "JOIN" || &msg.command[..] == "PART") {
|
||||||
let chan = match msg.suffix {
|
let chan = match msg.suffix {
|
||||||
Some(ref suffix) => &suffix[..],
|
Some(ref suffix) => &suffix[..],
|
||||||
|
@ -234,7 +234,7 @@ impl<T: IrcRead, U: IrcWrite> IrcServer<T, U> {
|
||||||
self.send_ctcp_internal(resp, "SOURCE");
|
self.send_ctcp_internal(resp, "SOURCE");
|
||||||
},
|
},
|
||||||
"PING" => self.send_ctcp_internal(resp, &format!("PING {}", tokens[1])),
|
"PING" => self.send_ctcp_internal(resp, &format!("PING {}", tokens[1])),
|
||||||
"TIME" => self.send_ctcp_internal(resp, &format!("TIME :{}",
|
"TIME" => self.send_ctcp_internal(resp, &format!("TIME :{}",
|
||||||
now().rfc822z())),
|
now().rfc822z())),
|
||||||
"USERINFO" => self.send_ctcp_internal(resp, &format!("USERINFO :{}",
|
"USERINFO" => self.send_ctcp_internal(resp, &format!("USERINFO :{}",
|
||||||
self.config.user_info())),
|
self.config.user_info())),
|
||||||
|
@ -293,7 +293,7 @@ impl<'a, T: IrcRead, U: IrcWrite> Iterator for ServerIterator<'a, T, U> {
|
||||||
self.server.handle_message(&msg);
|
self.server.handle_message(&msg);
|
||||||
Ok(msg)
|
Ok(msg)
|
||||||
},
|
},
|
||||||
Err(_) => Err(Error::new(ErrorKind::InvalidInput,
|
Err(_) => Err(Error::new(ErrorKind::InvalidInput,
|
||||||
&format!("Failed to parse message. (Message: {})", msg)[..]
|
&format!("Failed to parse message. (Message: {})", msg)[..]
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ pub trait ServerExt<'a, T, U>: Server<'a, T, U> {
|
||||||
self.send(INVITE(nick.to_owned(), chan.to_owned()))
|
self.send(INVITE(nick.to_owned(), chan.to_owned()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Quits the server entirely with a message.
|
/// Quits the server entirely with a message.
|
||||||
/// This defaults to `Powered by Rust.` if none is specified.
|
/// This defaults to `Powered by Rust.` if none is specified.
|
||||||
fn send_quit(&self, msg: &str) -> Result<()> where Self: Sized {
|
fn send_quit(&self, msg: &str) -> Result<()> where Self: Sized {
|
||||||
self.send(QUIT(Some(if msg.len() == 0 {
|
self.send(QUIT(Some(if msg.len() == 0 {
|
||||||
|
@ -212,7 +212,7 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn identify() {
|
fn identify() {
|
||||||
let server = IrcServer::from_connection(test_config(),
|
let server = IrcServer::from_connection(test_config(),
|
||||||
Connection::new(buf_empty(), Vec::new()));
|
Connection::new(buf_empty(), Vec::new()));
|
||||||
server.identify().unwrap();
|
server.identify().unwrap();
|
||||||
assert_eq!(&get_server_value(server)[..], "CAP END\r\nNICK :test\r\n\
|
assert_eq!(&get_server_value(server)[..], "CAP END\r\nNICK :test\r\n\
|
||||||
|
|
Loading…
Reference in a new issue