twitch_irc/message/commands/
reconnect.rs1use crate::message::commands::ServerMessageParseError;
2use crate::message::commands::ServerMessageParseError::MismatchedCommand;
3use crate::message::IRCMessage;
4use std::convert::TryFrom;
5
6#[cfg(feature = "with-serde")]
7use {serde::Deserialize, serde::Serialize};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
11#[cfg_attr(feature = "with-serde", derive(Serialize, Deserialize))]
12pub struct ReconnectMessage {
13 pub source: IRCMessage,
15}
16
17impl TryFrom<IRCMessage> for ReconnectMessage {
18 type Error = ServerMessageParseError;
19
20 fn try_from(source: IRCMessage) -> Result<ReconnectMessage, ServerMessageParseError> {
21 if source.command == "RECONNECT" {
22 Ok(ReconnectMessage { source })
23 } else {
24 Err(MismatchedCommand(source))
25 }
26 }
27}
28
29impl From<ReconnectMessage> for IRCMessage {
30 fn from(msg: ReconnectMessage) -> IRCMessage {
31 msg.source
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use crate::message::{IRCMessage, ReconnectMessage};
38 use std::convert::TryFrom;
39
40 #[test]
41 pub fn test_basic() {
42 let src = ":tmi.twitch.tv RECONNECT";
43 let irc_message = IRCMessage::parse(src).unwrap();
44 let msg = ReconnectMessage::try_from(irc_message.clone()).unwrap();
45
46 assert_eq!(
47 msg,
48 ReconnectMessage {
49 source: irc_message
50 }
51 )
52 }
53}