1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
use config::XMPPConfig; use std::fmt::Debug; pub trait EventTrait: Debug + ToString + Clone {} mod open_stream; mod proceed_tls; mod success_tls; mod start_tls; mod stream_features; mod unknown; mod presence; mod auth; mod bind; mod message; mod ping; pub use events::open_stream::OpenStream; pub use events::stream_features::StreamFeatures; pub use events::proceed_tls::ProceedTls; pub use events::success_tls::SuccessTls; pub use events::start_tls::StartTls; pub use events::unknown::Unknown; pub use events::presence::Presence; pub use events::auth::Auth; pub use events::bind::Bind; pub use events::ping::Ping; pub use events::message::Message; pub use events::bind::Generic; impl EventTrait for OpenStream {} impl EventTrait for ProceedTls {} impl EventTrait for SuccessTls {} impl EventTrait for StartTls {} impl EventTrait for StreamFeatures {} impl EventTrait for Unknown {} impl EventTrait for Presence {} impl EventTrait for Auth {} impl EventTrait for Bind {} impl EventTrait for Ping {} impl EventTrait for Message {} impl EventTrait for Generic {} #[derive(Debug, Clone)] pub enum IqType { BindIq(Bind), GenericIq(Generic), PingIq(Ping) } #[derive(Debug, Clone)] pub enum StanzaEvent { PresenceEvent(Presence), IqEvent(IqType), IqRequestEvent(IqType), IqResponseEvent(IqType), MessageEvent(Message), } #[derive(Debug, Clone)] pub enum NonStanzaEvent { OpenStreamEvent(OpenStream), ProceedTlsEvent(ProceedTls), SuccessTlsEvent(SuccessTls), StartTlsEvent(StartTls), StreamFeaturesEvent(StreamFeatures), AuthEvent(Auth), } #[derive(Debug, Clone)] pub enum Event { Unknown(Unknown, String), NonStanza(NonStanzaEvent, String), Stanza(StanzaEvent, String), } #[cfg(test)] mod tests { use std::str::FromStr; use super::*; fn compile<M: EventTrait>(event: &M) -> String { event.to_string() } #[test] fn test_event() { let event = OpenStream::new(&XMPPConfig::new()); let initial_stream = "<stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' xmlns='jabber:client'>"; assert!(compile(&event) == initial_stream.to_string(), compile(&event)); } #[test] fn test_parse() { let initial_stream = "<stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' xmlns='jabber:client'>"; let event = OpenStream::from_str(initial_stream).unwrap(); assert!(event.to == Some("example.com".to_string())); assert!(event.xmlns == "jabber:client"); } }