component: Add constructors.

Emmanuel Gil Peyrot created

Change summary

src/component.rs | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

Detailed changes

src/component.rs 🔗

@@ -11,10 +11,30 @@ use error::Error;
 use helpers::PlainText;
 use ns;
 
+use sha1::Sha1;
+use digest::Digest;
+
 generate_element_with_text!(Handshake, "handshake", ns::COMPONENT,
     data: PlainText<Option<String>>
 );
 
+impl Handshake {
+    pub fn new() -> Handshake {
+        Handshake {
+            data: None,
+        }
+    }
+
+    pub fn from_password_and_stream_id(password: &str, stream_id: &str) -> Handshake {
+        let input = String::from(stream_id) + password;
+        let hash = Sha1::digest(input.as_bytes());
+        let content = format!("{:x}", hash);
+        Handshake {
+            data: Some(content),
+        }
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -29,4 +49,13 @@ mod tests {
         let handshake = Handshake::try_from(elem).unwrap();
         assert_eq!(handshake.data, Some(String::from("Coucou")));
     }
+
+    #[test]
+    fn test_constructors() {
+        let handshake = Handshake::new();
+        assert_eq!(handshake.data, None);
+
+        let handshake = Handshake::from_password_and_stream_id("123456", "sid");
+        assert_eq!(handshake.data, Some(String::from("9accec263ab84a43c6037ccf7cd48cb1d3f6df8e")));
+    }
 }