implement a part of Client

lumi created

Change summary

src/client.rs | 45 ++++++++++++++++++++++++++++++++++++++++-----
src/lib.rs    |  1 +
2 files changed, 41 insertions(+), 5 deletions(-)

Detailed changes

src/client.rs 🔗

@@ -1,11 +1,46 @@
 use jid::Jid;
+use transport::SslTransport;
+use error::Error;
 
-pub struct XmppClient {
-    transport: SslTransport,
+pub struct ClientBuilder {
+    jid: Jid,
+    host: Option<String>,
+    port: u16,
 }
 
-impl XmppClient {
-    pub fn connect(jid: Jid) -> XmppClient {
-        unimplemented!();
+impl ClientBuilder {
+    pub fn new(jid: Jid) -> ClientBuilder {
+        ClientBuilder {
+            jid: jid,
+            host: None,
+            port: 5222,
+        }
+    }
+
+    pub fn host(mut self, host: String) -> ClientBuilder {
+        self.host = Some(host);
+        self
+    }
+
+    pub fn port(mut self, port: u16) -> ClientBuilder {
+        self.port = port;
+        self
+    }
+
+    pub fn connect(self) -> Result<Client, Error> {
+        let host = &self.host.unwrap_or(self.jid.domain.clone());
+        let transport = SslTransport::connect(host, self.port)?;
+        Ok(Client {
+            jid: self.jid,
+            transport: transport
+        })
     }
 }
+
+pub struct Client {
+    jid: Jid,
+    transport: SslTransport,
+}
+
+impl Client {
+}

src/lib.rs 🔗

@@ -5,3 +5,4 @@ pub mod ns;
 pub mod transport;
 pub mod error;
 pub mod jid;
+pub mod client;