add XMPPStream.send_stanza() convenience method

Astro created

Change summary

src/client/auth.rs    |  2 +-
src/client/bind.rs    |  6 ++----
src/component/auth.rs |  4 ++--
src/xmpp_stream.rs    | 10 +++++++++-
4 files changed, 14 insertions(+), 8 deletions(-)

Detailed changes

src/client/auth.rs 🔗

@@ -76,7 +76,7 @@ impl<S: AsyncWrite> ClientAuth<S> {
             .append(content.to_base64(base64::STANDARD))
             .build();
 
-        let send = stream.send(Packet::Stanza(nonza));
+        let send = stream.send_stanza(nonza);
 
         self.state = ClientAuthState::WaitSend(send);
     }

src/client/bind.rs 🔗

@@ -32,10 +32,8 @@ impl<S: AsyncWrite> ClientBind<S> {
                 ClientBind::Unsupported(stream),
             Some(_) => {
                 let resource = stream.jid.resource.clone();
-                let iq = Element::from(
-                    Bind::new(resource)
-                );
-                let send = stream.send(Packet::Stanza(iq));
+                let iq = Bind::new(resource);
+                let send = stream.send_stanza(iq);
                 ClientBind::WaitSend(send)
             },
         }

src/component/auth.rs 🔗

@@ -34,8 +34,8 @@ impl<S: AsyncWrite> ComponentAuth<S> {
     }
 
     fn send(&mut self, stream: XMPPStream<S>, handshake: Handshake) {
-        let nonza = Element::from(handshake);
-        let send = stream.send(Packet::Stanza(nonza));
+        let nonza = handshake;
+        let send = stream.send_stanza(nonza);
 
         self.state = ComponentAuthState::WaitSend(send);
     }

src/xmpp_stream.rs 🔗

@@ -1,10 +1,11 @@
 use futures::{Poll, Stream, Sink, StartSend};
+use futures::sink::Send;
 use tokio_io::{AsyncRead, AsyncWrite};
 use tokio_codec::Framed;
 use minidom::Element;
 use jid::Jid;
 
-use xmpp_codec::XMPPCodec;
+use xmpp_codec::{XMPPCodec, Packet};
 use stream_start::StreamStart;
 
 pub const NS_XMPP_STREAM: &str = "http://etherx.jabber.org/streams";
@@ -38,6 +39,13 @@ impl<S: AsyncRead + AsyncWrite> XMPPStream<S> {
     }
 }
 
+impl<S: AsyncWrite> XMPPStream<S> {
+    /// Convenience method
+    pub fn send_stanza<E: Into<Element>>(self, e: E) -> Send<Self> {
+        self.send(Packet::Stanza(e.into()))
+    }
+}
+
 /// Proxy to self.stream
 impl<S: AsyncWrite> Sink for XMPPStream<S> {
     type SinkItem = <Framed<S, XMPPCodec> as Sink>::SinkItem;