xmpp-parsers: Convert sm’s Enable and Enabled to xso

Emmanuel Gil Peyrot created

Change summary

parsers/src/sm.rs | 67 +++++++++++++++++++++++++-----------------------
1 file changed, 35 insertions(+), 32 deletions(-)

Detailed changes

parsers/src/sm.rs 🔗

@@ -32,19 +32,19 @@ generate_attribute!(
     bool
 );
 
-generate_element!(
-    /// Client request for enabling stream management.
-    #[derive(Default)]
-    Enable, "enable", SM,
-    attributes: [
-        /// The preferred resumption time in seconds by the client.
-        // TODO: should be the infinite integer set ≥ 1.
-        max: Option<u32> = "max",
-
-        /// Whether the client wants to be allowed to resume the stream.
-        resume: Default<ResumeAttr> = "resume",
-    ]
-);
+/// Client request for enabling stream management.
+#[derive(FromXml, AsXml, PartialEq, Debug, Clone, Default)]
+#[xml(namespace = ns::SM, name = "enable")]
+pub struct Enable {
+    /// The preferred resumption time in seconds by the client.
+    // TODO: should be the infinite integer set ≥ 1.
+    #[xml(attribute(default))]
+    pub max: Option<u32>,
+
+    /// Whether the client wants to be allowed to resume the stream.
+    #[xml(attribute(default))]
+    pub resume: ResumeAttr,
+}
 
 impl Enable {
     /// Generates a new `<enable/>` element.
@@ -70,25 +70,28 @@ generate_id!(
     StreamId
 );
 
-generate_element!(
-    /// Server response once stream management is enabled.
-    Enabled, "enabled", SM,
-    attributes: [
-        /// A random identifier used for stream resumption.
-        id: Option<StreamId> = "id",
-
-        /// The preferred IP, domain, IP:port or domain:port location for
-        /// resumption.
-        location: Option<String> = "location",
-
-        /// The preferred resumption time in seconds by the server.
-        // TODO: should be the infinite integer set ≥ 1.
-        max: Option<u32> = "max",
-
-        /// Whether stream resumption is allowed.
-        resume: Default<ResumeAttr> = "resume",
-    ]
-);
+/// Server response once stream management is enabled.
+#[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
+#[xml(namespace = ns::SM, name = "enabled")]
+pub struct Enabled {
+    /// A random identifier used for stream resumption.
+    #[xml(attribute(default))]
+    pub id: Option<StreamId>,
+
+    /// The preferred IP, domain, IP:port or domain:port location for
+    /// resumption.
+    #[xml(attribute(default))]
+    pub location: Option<String>,
+
+    /// The preferred resumption time in seconds by the server.
+    // TODO: should be the infinite integer set ≥ 1.
+    #[xml(attribute(default))]
+    pub max: Option<u32>,
+
+    /// Whether stream resumption is allowed.
+    #[xml(attribute(default))]
+    pub resume: ResumeAttr,
+}
 
 generate_element!(
     /// A stream management error happened.