xmpp-rs/parsers/src/json_containers.rs
Link Mauve 8c2b1df7f7 xmpp-parsers: Fix the type of jingle_rtp/ssrc to u32
XEP-0167 has been updated to version 1.2.3, to change the type of the
'ssrc' attribute to u32 (from String).  This is in accordance with
RFC 3550 (RTP), which defines it as a randomly-chosen 32-bit unsigned
integer.

Additionally, the docstring was completely wrong.
2025-12-03 12:26:30 +01:00

62 lines
1.8 KiB
Rust

// Copyright (c) 2025 Maxime “pep” Buquet <pep@bouah.net>
//
// 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
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
use crate::ns;
use xso::{AsXml, FromXml};
/// Structure representing a `<json xmlns='urn:xmpp:json:0'/>` element.
#[derive(FromXml, AsXml, Debug, Clone, PartialEq)]
#[xml(namespace = ns::JSON_CONTAINERS, name = "json")]
pub struct JsonContainer(#[xml(text)] serde_json::Value);
#[cfg(test)]
mod tests {
use super::*;
use minidom::Element;
use crate::Error::TextParseError;
use xso::error::FromElementError;
#[cfg(target_pointer_width = "32")]
#[test]
fn test_size() {
assert_size!(JsonContainer, 24);
}
#[cfg(target_pointer_width = "64")]
#[test]
fn test_size() {
assert_size!(JsonContainer, 32);
}
#[test]
fn test_empty() {
let elem: Element = "<json xmlns='urn:xmpp:json:0'/>".parse().unwrap();
let error = JsonContainer::try_from(elem.clone()).unwrap_err();
match error {
FromElementError::Invalid(TextParseError(err)) => {
assert_eq!(
err.to_string(),
"EOF while parsing a value at line 1 column 0"
);
}
_ => panic!(),
}
}
#[test]
fn test_simple() {
let elem: Element = "<json xmlns='urn:xmpp:json:0'>{\"a\": 1}</json>"
.parse()
.unwrap();
let result: serde_json::Value = "{\"a\": 1}".parse().unwrap();
match JsonContainer::try_from(elem.clone()) {
Ok(json) => assert_eq!(json.0, result),
_ => panic!(),
};
}
}