Use a Config struct for async_client

Paul Fariello created

Change summary

tokio-xmpp/src/client/async_client.rs | 41 ++++++++++++++++------------
1 file changed, 24 insertions(+), 17 deletions(-)

Detailed changes

tokio-xmpp/src/client/async_client.rs 🔗

@@ -27,13 +27,18 @@ use crate::{Error, ProtocolError};
 /// This implements the `futures` crate's [`Stream`](#impl-Stream) and
 /// [`Sink`](#impl-Sink<Packet>) traits.
 pub struct Client {
+    config: Config,
     state: ClientState,
+    reconnect: bool,
+    // TODO: tls_required=true
+}
+
+/// XMMPP client configuration
+pub struct Config {
     jid: Jid,
     password: String,
-    reconnect: bool,
     server: String,
     port: u16,
-    // TODO: tls_required=true
 }
 
 type XMPPStream = xmpp_stream::XMPPStream<TlsStream<TcpStream>>;
@@ -52,27 +57,29 @@ impl Client {
     /// and yield events.
     pub fn new<P: Into<String>>(jid: &str, password: P) -> Result<Self, JidParseError> {
         let jid = Jid::from_str(jid)?;
-        let server = jid.clone().domain();
-        let client = Self::new_with_jid(jid, password.into(), server, 5222);
+        let config = Config {
+            jid: jid.clone(),
+            password: password.into(),
+            server: jid.clone().domain(),
+            port: 5222,
+        };
+        let client = Self::new_with_config(config);
         Ok(client)
     }
 
     /// Start a new client given that the JID is already parsed.
-    pub fn new_with_jid(jid: Jid, password: String, server: String, port: u16) -> Self {
+    pub fn new_with_config(config: Config) -> Self {
         let local = LocalSet::new();
         let connect = local.spawn_local(Self::connect(
-            server.clone(),
-            port,
-            jid.clone(),
-            password.clone(),
+            config.server.clone(),
+            config.port,
+            config.jid.clone(),
+            config.password.clone(),
         ));
         let client = Client {
-            jid,
-            password,
+            config: config,
             state: ClientState::Connecting(connect, local),
             reconnect: false,
-            server: server,
-            port: port,
         };
         client
     }
@@ -178,10 +185,10 @@ impl Stream for Client {
                 // TODO: add timeout
                 let mut local = LocalSet::new();
                 let connect = local.spawn_local(Self::connect(
-                    self.server.clone(),
-                    self.port,
-                    self.jid.clone(),
-                    self.password.clone(),
+                    self.config.server.clone(),
+                    self.config.port,
+                    self.config.jid.clone(),
+                    self.config.password.clone(),
                 ));
                 let _ = Pin::new(&mut local).poll(cx);
                 self.state = ClientState::Connecting(connect, local);