Check for missing namespace and test

This commit is contained in:
Mikhail 2024-04-22 21:47:32 +02:00
parent 9fd4575958
commit 847cb4867b
1 changed files with 12 additions and 2 deletions

View File

@ -2,7 +2,7 @@ use quick_xml::events::{BytesStart, Event};
use crate::xml::*; use crate::xml::*;
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use quick_xml::name::ResolveResult; use quick_xml::name::{Namespace, ResolveResult};
pub const XMLNS: &'static str = "jabber:iq:roster"; pub const XMLNS: &'static str = "jabber:iq:roster";
@ -14,6 +14,9 @@ impl FromXml for RosterQuery {
fn parse() -> Self::P { fn parse() -> Self::P {
|(mut namespace, mut event): (ResolveResult<'static>, &'static Event<'static>)| -> Result<Self> { |(mut namespace, mut event): (ResolveResult<'static>, &'static Event<'static>)| -> Result<Self> {
let ResolveResult::Bound(Namespace(ns)) = namespace else {
return Err(anyhow!("No namespace provided"));
};
match event { match event {
Event::Start(_) => (), Event::Start(_) => (),
Event::Empty(_) => return Ok(RosterQuery), Event::Empty(_) => return Ok(RosterQuery),
@ -57,7 +60,7 @@ mod tests {
from: Option::from(Jid { from: Option::from(Jid {
name: Option::from(Name("juliet".into())), name: Option::from(Name("juliet".into())),
server: Server("example.com".into()), server: Server("example.com".into()),
resource: Option::from(Resource("balcony".into())) resource: Option::from(Resource("balcony".into())),
}), }),
id: "bv1bs71f".to_string(), id: "bv1bs71f".to_string(),
to: None, to: None,
@ -66,4 +69,11 @@ mod tests {
} }
) )
} }
#[test]
fn test_missing_namespace() {
let input = r#"<iq from='juliet@example.com/balcony' id='bv1bs71f' type='get'><query/></iq>"#;
assert!(parse::<Iq<RosterQuery>>(input).is_err());
}
} }