diff --git a/src/lib.rs b/src/lib.rs index e420e233..a0b36c34 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -110,6 +110,9 @@ pub mod caps; /// XEP-0166: Jingle pub mod jingle; +/// XEP-0172: User Nickname +pub mod nick; + /// XEP-0184: Message Delivery Receipts pub mod receipts; diff --git a/src/nick.rs b/src/nick.rs new file mode 100644 index 00000000..9844e931 --- /dev/null +++ b/src/nick.rs @@ -0,0 +1,54 @@ +// Copyright (c) 2018 Emmanuel Gil Peyrot +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +generate_elem_id!( + /// Represents a global, memorable, friendly or informal name chosen by a user. + Nick, "nick", NICK +); + +#[cfg(test)] +mod tests { + use super::*; + use try_from::TryFrom; + use minidom::Element; + use error::Error; + + #[test] + fn test_simple() { + let elem: Element = "Link Mauve".parse().unwrap(); + let nick = Nick::try_from(elem).unwrap(); + assert_eq!(&nick.0, "Link Mauve"); + } + + #[test] + fn test_serialise() { + let elem1 = Element::from(Nick(String::from("Link Mauve"))); + let elem2: Element = "Link Mauve".parse().unwrap(); + assert_eq!(elem1, elem2); + } + + #[test] + fn test_invalid() { + let elem: Element = "".parse().unwrap(); + let error = Nick::try_from(elem).unwrap_err(); + let message = match error { + Error::ParseError(string) => string, + _ => panic!(), + }; + assert_eq!(message, "Unknown child in nick element."); + } + + #[test] + fn test_invalid_attribute() { + let elem: Element = "".parse().unwrap(); + let error = Nick::try_from(elem).unwrap_err(); + let message = match error { + Error::ParseError(string) => string, + _ => panic!(), + }; + assert_eq!(message, "Unknown attribute in nick element."); + } +} diff --git a/src/ns.rs b/src/ns.rs index 22278862..1eb6e301 100644 --- a/src/ns.rs +++ b/src/ns.rs @@ -74,6 +74,9 @@ pub const CAPS: &str = "http://jabber.org/protocol/caps"; /// XEP-0166: Jingle pub const JINGLE: &str = "urn:xmpp:jingle:1"; +/// XEP-0172: User Nickname +pub const NICK: &str = "http://jabber.org/protocol/nick"; + /// XEP-0184: Message Delivery Receipts pub const RECEIPTS: &str = "urn:xmpp:receipts";