forked from lavina/lavina
1
0
Fork 0
lavina/crates/proto-xmpp/src/roster.rs

41 lines
1.2 KiB
Rust
Raw Normal View History

2023-03-12 21:50:28 +00:00
use quick_xml::events::{BytesStart, Event};
use crate::xml::*;
use anyhow::{anyhow, Result};
use quick_xml::name::ResolveResult;
2023-03-12 21:50:28 +00:00
pub const XMLNS: &'static str = "jabber:iq:roster";
#[derive(PartialEq, Eq, Debug)]
pub struct RosterQuery;
impl FromXml for RosterQuery {
type P = impl Parser<Output = Result<Self>>;
2023-03-12 21:50:28 +00:00
fn parse() -> Self::P {
|(mut namespace, mut event): (ResolveResult<'static>, &'static Event<'static>)| -> Result<Self> {
match event {
Event::Start(_) => (),
Event::Empty(_) => return Ok(RosterQuery),
_ => return Err(anyhow!("Unexpected XML event: {event:?}")),
}
(namespace, event) = yield;
match event {
Event::End(_) => return Ok(RosterQuery),
_ => return Err(anyhow!("Unexpected XML event: {event:?}")),
}
}
2023-03-12 21:50:28 +00:00
}
}
impl FromXmlTag for RosterQuery {
const NAME: &'static str = "query";
const NS: &'static str = XMLNS;
}
impl ToXml for RosterQuery {
fn serialize(&self, events: &mut Vec<Event<'static>>) {
2024-03-20 18:59:15 +00:00
events.push(Event::Empty(BytesStart::new(format!(r#"query xmlns="{}""#, XMLNS))));
2023-03-12 21:50:28 +00:00
}
}