xmpp-parsers: Fix jingle thumbnails wrt the XEP changes
Version 0.4.2 added a restriction on width and height to be in the 0..65535 range. The media-type attribute has always been optional as well.
This commit is contained in:
parent
6d7a95b6ca
commit
7fca02958b
3 changed files with 30 additions and 14 deletions
|
|
@ -24,7 +24,9 @@ XXXX-YY-ZZ RELEASER <admin@example.com>
|
||||||
nothing so far uses it for anything but this message. We can always
|
nothing so far uses it for anything but this message. We can always
|
||||||
change it again once any other specification allows e.g. presences or
|
change it again once any other specification allows e.g. presences or
|
||||||
iqs.
|
iqs.
|
||||||
- Module `jingle_thumnails` renamed to `jingle_thumbnails`.
|
- Module `jingle_thumnails` has been renamed to `jingle_thumbnails`. It
|
||||||
|
now respect the latest version of the XEP, with the width and height
|
||||||
|
being limited to 0..65535 and the media-type being optional (!475).
|
||||||
- The bookmarks2 Conference `extensions` child is now an
|
- The bookmarks2 Conference `extensions` child is now an
|
||||||
`Option<Extensions>` instead of a `Vec<Element>`, to distinguish
|
`Option<Extensions>` instead of a `Vec<Element>`, to distinguish
|
||||||
between it being absent or empty (!472).
|
between it being absent or empty (!472).
|
||||||
|
|
|
||||||
|
|
@ -411,7 +411,7 @@
|
||||||
<xmpp:SupportedXep>
|
<xmpp:SupportedXep>
|
||||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0264.html"/>
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0264.html"/>
|
||||||
<xmpp:status>complete</xmpp:status>
|
<xmpp:status>complete</xmpp:status>
|
||||||
<xmpp:version>0.4.1</xmpp:version>
|
<xmpp:version>0.4.2</xmpp:version>
|
||||||
<xmpp:since>0.21.0</xmpp:since>
|
<xmpp:since>0.21.0</xmpp:since>
|
||||||
</xmpp:SupportedXep>
|
</xmpp:SupportedXep>
|
||||||
</implements>
|
</implements>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
//! Jingle thumbnails (XEP-0264)
|
// Copyright (c) 2023 XMPP-RS contributors.
|
||||||
|
|
||||||
// Copyright (c) 2023 XMPP-RS contributors.=
|
|
||||||
//
|
//
|
||||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
// 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
|
// 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/.
|
// file, you can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
//! Jingle thumbnails (XEP-0264)
|
||||||
|
|
||||||
use xso::{AsXml, FromXml};
|
use xso::{AsXml, FromXml};
|
||||||
|
|
||||||
use crate::ns;
|
use crate::ns;
|
||||||
|
use core::num::NonZeroU16;
|
||||||
|
|
||||||
/// A Jingle thumbnail.
|
/// A Jingle thumbnail.
|
||||||
#[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
|
#[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
|
||||||
|
|
@ -19,23 +20,36 @@ pub struct Thumbnail {
|
||||||
pub uri: String,
|
pub uri: String,
|
||||||
|
|
||||||
/// The media type of the thumbnail.
|
/// The media type of the thumbnail.
|
||||||
#[xml(attribute = "media-type")]
|
#[xml(attribute(default, name = "media-type"))]
|
||||||
pub media_type: String,
|
pub media_type: Option<String>,
|
||||||
|
|
||||||
/// The width of the thumbnail.
|
/// The width of the thumbnail.
|
||||||
#[xml(attribute)]
|
#[xml(attribute(default))]
|
||||||
pub width: u32,
|
pub width: Option<NonZeroU16>,
|
||||||
|
|
||||||
/// The height of the thumbnail.
|
/// The height of the thumbnail.
|
||||||
#[xml(attribute)]
|
#[xml(attribute(default))]
|
||||||
pub height: u32,
|
pub height: Option<NonZeroU16>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::jingle_thumbnails::Thumbnail;
|
use crate::jingle_thumbnails::Thumbnail;
|
||||||
|
use core::num::NonZeroU16;
|
||||||
use minidom::Element;
|
use minidom::Element;
|
||||||
|
|
||||||
|
#[cfg(target_pointer_width = "32")]
|
||||||
|
#[test]
|
||||||
|
fn test_size() {
|
||||||
|
assert_size!(Thumbnail, 28);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_pointer_width = "64")]
|
||||||
|
#[test]
|
||||||
|
fn test_size() {
|
||||||
|
assert_size!(Thumbnail, 56);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_simple_parse() {
|
fn test_simple_parse() {
|
||||||
// Extracted from https://xmpp.org/extensions/xep-0264.html#example-1
|
// Extracted from https://xmpp.org/extensions/xep-0264.html#example-1
|
||||||
|
|
@ -53,8 +67,8 @@ mod tests {
|
||||||
thumbnail.uri,
|
thumbnail.uri,
|
||||||
"cid:sha1+ffd7c8d28e9c5e82afea41f97108c6b4@bob.xmpp.org"
|
"cid:sha1+ffd7c8d28e9c5e82afea41f97108c6b4@bob.xmpp.org"
|
||||||
);
|
);
|
||||||
assert_eq!(thumbnail.media_type, "image/png");
|
assert_eq!(thumbnail.media_type.unwrap(), "image/png");
|
||||||
assert_eq!(thumbnail.width, 128);
|
assert_eq!(thumbnail.width, NonZeroU16::new(128));
|
||||||
assert_eq!(thumbnail.height, 96);
|
assert_eq!(thumbnail.height, NonZeroU16::new(96));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue