mood: Add support for the <text/> element.

Emmanuel Gil Peyrot created

Change summary

src/macros.rs |  5 +++--
src/mood.rs   | 12 ++++++++++++
2 files changed, 15 insertions(+), 2 deletions(-)

Detailed changes

src/macros.rs 🔗

@@ -314,7 +314,8 @@ macro_rules! generate_id {
 }
 
 macro_rules! generate_elem_id {
-    ($elem:ident, $name:tt, $ns:ident) => (
+    ($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident) => (
+        $(#[$meta])*
         #[derive(Debug, Clone, PartialEq, Eq, Hash)]
         pub struct $elem(pub String);
         impl ::std::str::FromStr for $elem {
@@ -391,7 +392,7 @@ macro_rules! generate_element_with_text {
 }
 
 macro_rules! generate_element_with_children {
-    ($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, attributes: [$($(#[$attr_meta:meta])* $attr:ident: $attr_type:ty = $attr_name:tt => $attr_action:tt),+], children: [$($(#[$child_meta:meta])* $child_ident:ident: Vec<$child_type:ty> = ($child_name:tt, $child_ns:ident) => $child_constructor:ident),+]) => (
+    ($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, attributes: [$($(#[$attr_meta:meta])* $attr:ident: $attr_type:ty = $attr_name:tt => $attr_action:tt),*], children: [$($(#[$child_meta:meta])* $child_ident:ident: Vec<$child_type:ty> = ($child_name:tt, $child_ns:ident) => $child_constructor:ident),+]) => (
         $(#[$meta])*
         #[derive(Debug, Clone)]
         pub struct $elem {

src/mood.rs 🔗

@@ -263,6 +263,11 @@ generate_element_enum!(
     }
 );
 
+generate_elem_id!(
+    /// Free-form text description of the mood.
+    Text, "text", MOOD
+);
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -275,4 +280,11 @@ mod tests {
         let mood = MoodEnum::try_from(elem).unwrap();
         assert_eq!(mood, MoodEnum::Happy);
     }
+
+    #[test]
+    fn test_text() {
+        let elem: Element = "<text xmlns='http://jabber.org/protocol/mood'>Yay!</text>".parse().unwrap();
+        let text = Text::try_from(elem).unwrap();
+        assert_eq!(text.0, String::from("Yay!"));
+    }
 }