delay: Use Jid for from attribute.

Emmanuel Gil Peyrot created

Change summary

src/delay.rs | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)

Detailed changes

src/delay.rs 🔗

@@ -8,12 +8,13 @@ use minidom::{Element, IntoElements};
 use minidom::convert::ElementEmitter;
 
 use error::Error;
+use jid::Jid;
 
 use ns;
 
 #[derive(Debug, Clone)]
 pub struct Delay {
-    pub from: Option<String>,
+    pub from: Option<Jid>,
     pub stamp: String,
     pub data: Option<String>,
 }
@@ -41,7 +42,7 @@ pub fn parse_delay(root: &Element) -> Result<Delay, Error> {
 pub fn serialise(delay: &Delay) -> Element {
     Element::builder("delay")
             .ns(ns::DELAY)
-            .attr("from", delay.from.clone())
+            .attr("from", delay.from.clone().and_then(|value| Some(String::from(value))))
             .attr("stamp", delay.stamp.clone())
             .append(delay.data.clone())
             .build()
@@ -56,15 +57,17 @@ impl IntoElements for Delay {
 
 #[cfg(test)]
 mod tests {
+    use std::str::FromStr;
     use minidom::Element;
     use error::Error;
+    use jid::Jid;
     use delay;
 
     #[test]
     fn test_simple() {
         let elem: Element = "<delay xmlns='urn:xmpp:delay' from='capulet.com' stamp='2002-09-10T23:08:25Z'/>".parse().unwrap();
         let delay = delay::parse_delay(&elem).unwrap();
-        assert_eq!(delay.from, Some(String::from("capulet.com")));
+        assert_eq!(delay.from, Some(Jid::from_str("capulet.com").unwrap()));
         assert_eq!(delay.stamp, "2002-09-10T23:08:25Z");
         assert_eq!(delay.data, None);
     }
@@ -107,7 +110,7 @@ mod tests {
     fn test_serialise_data() {
         let elem: Element = "<delay xmlns='urn:xmpp:delay' from='juliet@example.org' stamp='2002-09-10T23:08:25Z'>Reason</delay>".parse().unwrap();
         let delay = delay::Delay {
-            from: Some(String::from("juliet@example.org")),
+            from: Some(Jid::from_str("juliet@example.org").unwrap()),
             stamp: "2002-09-10T23:08:25Z".to_owned(),
             data: Some(String::from("Reason")),
         };