diff --git a/jid/Cargo.toml b/jid/Cargo.toml index 63dea0d..df0f0fc 100644 --- a/jid/Cargo.toml +++ b/jid/Cargo.toml @@ -23,3 +23,7 @@ memchr = "2.5" minidom = { version = "0.15", optional = true } serde = { version = "1.0", features = ["derive"], optional = true } stringprep = "0.1.3" + +[dev-dependencies] +serde_json = "1" +jid = { path = ".", features = [ "serde" ] } \ No newline at end of file diff --git a/jid/src/lib.rs b/jid/src/lib.rs index f49ee99..2e693e7 100644 --- a/jid/src/lib.rs +++ b/jid/src/lib.rs @@ -911,4 +911,49 @@ mod tests { let fulljid = FullJid::from_parts(Some(&node), &domain, &resource); assert_eq!(fulljid, FullJid::new("node@domain/resource").unwrap()); } + + #[cfg(feature="serde")] + #[derive(Serialize, Deserialize)] + struct User { + jid: T, + } + + #[cfg(feature="serde")] + impl From for User { + fn from(jid: T) -> User { + User { + jid, + } + } + } + + #[cfg(feature="serde")] + const BARE_JSON_STR: &'static str = "{\"jid\":\"node@domain\"}"; + #[cfg(feature="serde")] + const FULL_JSON_STR: &'static str = "{\"jid\":\"node@domain/resource\"}"; + + #[test] + #[cfg(feature="serde")] + fn jid_serialize() { + let jid: User = Jid::new("node@domain").unwrap().into(); + assert_eq!(BARE_JSON_STR, serde_json::to_string(&jid).unwrap()); + let jid: User = BareJid::new("node@domain").unwrap().into(); + assert_eq!(BARE_JSON_STR, serde_json::to_string(&jid).unwrap()); + let jid: User = FullJid::new("node@domain/resource").unwrap().into(); + assert_eq!(FULL_JSON_STR, serde_json::to_string(&jid).unwrap()); + } + + #[test] + #[cfg(feature="serde")] + fn jid_deserialize() { + let jid = Jid::new("node@domain").unwrap(); + let deser_jid: User = serde_json::from_str(BARE_JSON_STR).unwrap(); + assert_eq!(jid, deser_jid.jid); + let jid = BareJid::new("node@domain").unwrap(); + let deser_jid: User = serde_json::from_str(BARE_JSON_STR).unwrap(); + assert_eq!(jid, deser_jid.jid); + let jid = FullJid::new("node@domain/resource").unwrap(); + let deser_jid: User = serde_json::from_str(FULL_JSON_STR).unwrap(); + assert_eq!(jid, deser_jid.jid); + } }