add jid to Event::Online

Astro created

breaks the API

Change summary

examples/echo_bot.rs |  5 ++++-
src/client/mod.rs    |  3 ++-
src/component/mod.rs |  2 +-
src/event.rs         | 14 +++++++++++---
4 files changed, 18 insertions(+), 6 deletions(-)

Detailed changes

examples/echo_bot.rs 🔗

@@ -47,7 +47,10 @@ fn main() {
         if wait_for_stream_end {
             /* Do nothing */
         } else if event.is_online() {
-            println!("Online!");
+            let jid = event.get_jid()
+                .map(|jid| format!("{}", jid))
+                .unwrap_or("unknown".to_owned());
+            println!("Online at {}", jid);
 
             let presence = make_presence();
             tx.start_send(Packet::Stanza(presence)).unwrap();

src/client/mod.rs 🔗

@@ -145,8 +145,9 @@ impl Stream for Client {
             ClientState::Disconnected => Ok(Async::Ready(None)),
             ClientState::Connecting(mut connect) => match connect.poll() {
                 Ok(Async::Ready(stream)) => {
+                    let jid = stream.jid.clone();
                     self.state = ClientState::Connected(stream);
-                    Ok(Async::Ready(Some(Event::Online)))
+                    Ok(Async::Ready(Some(Event::Online(jid))))
                 }
                 Ok(Async::NotReady) => {
                     self.state = ClientState::Connecting(connect);

src/component/mod.rs 🔗

@@ -90,7 +90,7 @@ impl Stream for Component {
             ComponentState::Connecting(mut connect) => match connect.poll() {
                 Ok(Async::Ready(stream)) => {
                     self.state = ComponentState::Connected(stream);
-                    Ok(Async::Ready(Some(Event::Online)))
+                    Ok(Async::Ready(Some(Event::Online(self.jid.clone()))))
                 }
                 Ok(Async::NotReady) => {
                     self.state = ComponentState::Connecting(connect);

src/event.rs 🔗

@@ -1,10 +1,10 @@
-use xmpp_parsers::Element;
+use xmpp_parsers::{Element, Jid};
 
 /// High-level event on the Stream implemented by Client and Component
 #[derive(Debug)]
 pub enum Event {
     /// Stream is connected and initialized
-    Online,
+    Online(Jid),
     /// Stream end
     Disconnected,
     /// Received stanza/nonza
@@ -15,11 +15,19 @@ impl Event {
     /// `Online` event?
     pub fn is_online(&self) -> bool {
         match *self {
-            Event::Online => true,
+            Event::Online(_) => true,
             _ => false,
         }
     }
 
+    /// Get the server-assigned JID for the `Online` event
+    pub fn get_jid(&self) -> Option<&Jid> {
+        match *self {
+            Event::Online(ref jid) => Some(jid),
+            _ => None,
+        }
+    }
+
     /// `Stanza` event?
     pub fn is_stanza(&self, name: &str) -> bool {
         match *self {