From 54ca5eb3155d1cfcadced7c0a3a405ce1d51ecf6 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Mon, 24 Mar 2025 12:22:08 +0000 Subject: feat(stanza): xep-0203 --- stanza/src/xep_0203.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 stanza/src/xep_0203.rs (limited to 'stanza/src/xep_0203.rs') diff --git a/stanza/src/xep_0203.rs b/stanza/src/xep_0203.rs new file mode 100644 index 0000000..b8f9239 --- /dev/null +++ b/stanza/src/xep_0203.rs @@ -0,0 +1,34 @@ +use chrono::{DateTime, Utc}; +use jid::JID; +use peanuts::{ + element::{FromElement, IntoElement}, + Element, +}; + +pub const XMLNS: &str = "urn:xmpp:delay"; + +#[derive(Debug, Clone)] +pub struct Delay { + pub from: Option, + pub stamp: DateTime, +} + +impl FromElement for Delay { + fn from_element(mut element: Element) -> peanuts::element::DeserializeResult { + element.check_name("delay")?; + element.check_namespace(XMLNS)?; + + let from = element.attribute_opt("from")?; + let stamp = element.attribute("stamp")?; + + Ok(Delay { from, stamp }) + } +} + +impl IntoElement for Delay { + fn builder(&self) -> peanuts::element::ElementBuilder { + Element::builder("delay", Some(XMLNS)) + .push_attribute_opt("from", self.from.clone()) + .push_attribute("stamp", self.stamp.format("%C%y-%m-%dT%H:%M:%S%.3f%:z")) + } +} -- cgit