diff options
author | 2025-07-01 18:50:21 +0100 | |
---|---|---|
committer | 2025-07-01 18:50:21 +0100 | |
commit | ec5652c3b207153251df279944e0fe36e0dd7dec (patch) | |
tree | cfbc7e47eacbc131c2acad690d60ffdea239d0be /stanza/src/xep_0280.rs | |
parent | e225a6c7d5ef2eb44d068f9d13cb9717cb0ba3bb (diff) | |
download | luz-ec5652c3b207153251df279944e0fe36e0dd7dec.tar.gz luz-ec5652c3b207153251df279944e0fe36e0dd7dec.tar.bz2 luz-ec5652c3b207153251df279944e0fe36e0dd7dec.zip |
feat(stanza): xep-0280 message carbons
Diffstat (limited to '')
-rw-r--r-- | stanza/src/xep_0280.rs | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/stanza/src/xep_0280.rs b/stanza/src/xep_0280.rs new file mode 100644 index 0000000..c26793f --- /dev/null +++ b/stanza/src/xep_0280.rs @@ -0,0 +1,109 @@ +use peanuts::{Element, FromElement, IntoElement}; + +use crate::xep_0297::Forwarded; + +pub const XMLNS: &str = "urn:xmpp:carbons:2"; + +#[derive(Clone, Debug)] +pub struct Disable; + +impl FromElement for Disable { + fn from_element(element: Element) -> peanuts::DeserializeResult<Self> { + element.check_name("disable")?; + element.check_namespace(XMLNS)?; + + element.no_more_content()?; + + Ok(Self) + } +} + +impl IntoElement for Disable { + fn builder(&self) -> peanuts::ElementBuilder { + Element::builder("disable", Some(XMLNS)) + } +} + +#[derive(Clone, Debug)] +pub struct Enable; + +impl FromElement for Enable { + fn from_element(element: Element) -> peanuts::DeserializeResult<Self> { + element.check_name("enable")?; + element.check_namespace(XMLNS)?; + + element.no_more_content()?; + + Ok(Self) + } +} + +impl IntoElement for Enable { + fn builder(&self) -> peanuts::ElementBuilder { + Element::builder("enable", Some(XMLNS)) + } +} + +#[derive(Clone, Debug)] +pub struct Private; + +impl FromElement for Private { + fn from_element(element: Element) -> peanuts::DeserializeResult<Self> { + element.check_name("private")?; + element.check_namespace(XMLNS)?; + + element.no_more_content()?; + + Ok(Self) + } +} + +impl IntoElement for Private { + fn builder(&self) -> peanuts::ElementBuilder { + Element::builder("private", Some(XMLNS)) + } +} + +#[derive(Clone, Debug)] +pub struct Received { + forwarded: Forwarded, +} + +impl FromElement for Received { + fn from_element(mut element: Element) -> peanuts::DeserializeResult<Self> { + element.check_name("received")?; + element.check_namespace(XMLNS)?; + + let forwarded = element.pop_child_one()?; + + Ok(Self { forwarded }) + } +} + +impl IntoElement for Received { + fn builder(&self) -> peanuts::ElementBuilder { + Element::builder("received", Some(XMLNS)).push_child(self.forwarded.clone()) + } +} + +#[derive(Clone, Debug)] +pub struct Sent { + forwarded: Forwarded, +} + +impl FromElement for Sent { + fn from_element(mut element: Element) -> peanuts::DeserializeResult<Self> { + element.check_name("sent")?; + element.check_namespace(XMLNS)?; + + let forwarded = element.pop_child_one()?; + + Ok(Self { forwarded }) + } +} + +impl IntoElement for Sent { + fn builder(&self) -> peanuts::ElementBuilder { + Element::builder("sent", Some(XMLNS)).push_child(self.forwarded.clone()) + } +} |