parsers: add support for <optional/> in stream management feature

This commit is contained in:
Jonas Schäfer 2024-08-18 09:35:53 +02:00
commit 0f0759b207
3 changed files with 19 additions and 4 deletions

View file

@ -30,6 +30,8 @@ XXXX-YY-ZZ RELEASER <admin@example.com>
- SASL Channel-Binding Type Capability (XEP-0440) - SASL Channel-Binding Type Capability (XEP-0440)
- Stream Limits Advertisement (XEP-0478) - Stream Limits Advertisement (XEP-0478)
- RFC 6120 stream errors - RFC 6120 stream errors
* Improvements:
- Add support for `<optional/> in XEP-0198 feature advertisment
Version 0.21.0: Version 0.21.0:
2024-07-25 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> 2024-07-25 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>

View file

@ -268,7 +268,7 @@ mod tests {
let inline = auth.inline.unwrap(); let inline = auth.inline.unwrap();
assert_eq!(inline.bind2.unwrap().inline_features.len(), 0); assert_eq!(inline.bind2.unwrap().inline_features.len(), 0);
assert_eq!(inline.sm.unwrap(), StreamManagement); assert_eq!(inline.sm.unwrap(), StreamManagement { optional: None });
assert_eq!(inline.payloads.len(), 0); assert_eq!(inline.payloads.len(), 0);
} }

View file

@ -140,11 +140,22 @@ pub struct Resumed {
pub previd: StreamId, pub previd: StreamId,
} }
/// Marker whose presence indicates that negotiating stream management is
/// optional.
#[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
#[xml(namespace = ns::SM, name = "optional")]
pub struct Optional;
// TODO: add support for optional and required. // TODO: add support for optional and required.
/// Represents availability of Stream Management in `<stream:features/>`. /// Represents availability of Stream Management in `<stream:features/>`.
#[derive(FromXml, AsXml, PartialEq, Debug, Clone)] #[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
#[xml(namespace = ns::SM, name = "sm")] #[xml(namespace = ns::SM, name = "sm")]
pub struct StreamManagement; pub struct StreamManagement {
// TODO: replace with #[xml(flag)] once we have it.
/// `<optional/>` flag.
#[xml(child(default))]
pub optional: Option<Optional>,
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
@ -163,7 +174,8 @@ mod tests {
assert_size!(R, 0); assert_size!(R, 0);
assert_size!(Resume, 16); assert_size!(Resume, 16);
assert_size!(Resumed, 16); assert_size!(Resumed, 16);
assert_size!(StreamManagement, 0); assert_size!(StreamManagement, 1);
assert_size!(Optional, 0);
} }
#[cfg(target_pointer_width = "64")] #[cfg(target_pointer_width = "64")]
@ -178,7 +190,8 @@ mod tests {
assert_size!(R, 0); assert_size!(R, 0);
assert_size!(Resume, 32); assert_size!(Resume, 32);
assert_size!(Resumed, 32); assert_size!(Resumed, 32);
assert_size!(StreamManagement, 0); assert_size!(StreamManagement, 1);
assert_size!(Optional, 0);
} }
#[test] #[test]