xmpp-parsers: Convert OOB to xso

Emmanuel Gil Peyrot created

Change summary

parsers/src/oob.rs | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)

Detailed changes

parsers/src/oob.rs 🔗

@@ -4,19 +4,23 @@
 // 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/.
 
+use xso::{AsXml, FromXml};
+
 use crate::message::MessagePayload;
+use crate::ns;
 
-generate_element!(
-    /// Defines associated out of band url.
-    Oob, "x", OOB,
-    children: [
-        /// The associated URL.
-        url: Required<String> = ("url", OOB) => String,
+/// Defines associated out of band url.
+#[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
+#[xml(namespace = ns::OOB, name = "x")]
+pub struct Oob {
+    /// The associated URL.
+    #[xml(extract(fields(text)))]
+    pub url: String,
 
-        /// An optional description of the out of band data.
-        desc: Option<String> = ("desc", OOB) => String,
-    ]
-);
+    /// An optional description of the out of band data.
+    #[xml(extract(default, fields(text(type_ = String))))]
+    pub desc: Option<String>,
+}
 
 impl MessagePayload for Oob {}
 
@@ -63,6 +67,6 @@ mod tests {
             FromElementError::Invalid(Error::Other(string)) => string,
             _ => panic!(),
         };
-        assert_eq!(message, "Missing child url in x element.");
+        assert_eq!(message, "Missing child field 'url' in Oob element.");
     }
 }