Change summary
jid/Cargo.toml | 4 ++++
jid/src/lib.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
Detailed changes
@@ -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" ] }
@@ -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<T> {
+ jid: T,
+ }
+
+ #[cfg(feature="serde")]
+ impl<T> From<T> for User<T> {
+ fn from(jid: T) -> User<T> {
+ 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> = Jid::new("node@domain").unwrap().into();
+ assert_eq!(BARE_JSON_STR, serde_json::to_string(&jid).unwrap());
+ let jid: User<BareJid> = BareJid::new("node@domain").unwrap().into();
+ assert_eq!(BARE_JSON_STR, serde_json::to_string(&jid).unwrap());
+ let jid: User<FullJid> = 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<Jid> = 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<BareJid> = 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<FullJid> = serde_json::from_str(FULL_JSON_STR).unwrap();
+ assert_eq!(jid, deser_jid.jid);
+ }
}