From 1af59efbb312b680b742bb84198c6ba18a79ec31 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Thu, 3 Apr 2025 23:17:06 +0100 Subject: feat(stanza): xep-0084: user avatar --- stanza/src/xep_0084/data.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 stanza/src/xep_0084/data.rs (limited to 'stanza/src/xep_0084/data.rs') diff --git a/stanza/src/xep_0084/data.rs b/stanza/src/xep_0084/data.rs new file mode 100644 index 0000000..2a37df4 --- /dev/null +++ b/stanza/src/xep_0084/data.rs @@ -0,0 +1,30 @@ +use peanuts::{ + element::{FromElement, IntoElement}, + Element, +}; + +pub const XMLNS: &str = "urn:xmpp:avatar:data"; + +#[derive(Debug, Clone)] +pub struct Data(pub String); + +impl FromElement for Data { + fn from_element(mut element: peanuts::Element) -> peanuts::element::DeserializeResult { + element.check_name("data")?; + element.check_namespace(XMLNS)?; + + Ok(Self(element.pop_value_opt()?.unwrap_or_default())) + } +} + +impl IntoElement for Data { + fn builder(&self) -> peanuts::element::ElementBuilder { + let builder = Element::builder("data", Some(XMLNS)); + + if self.0.is_empty() { + builder + } else { + builder.push_text(self.0.clone()) + } + } +} -- cgit