aboutsummaryrefslogtreecommitdiffstats
path: root/stanza/src/xep_0280.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-07-01 18:50:21 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-07-01 18:50:21 +0100
commitec5652c3b207153251df279944e0fe36e0dd7dec (patch)
treecfbc7e47eacbc131c2acad690d60ffdea239d0be /stanza/src/xep_0280.rs
parente225a6c7d5ef2eb44d068f9d13cb9717cb0ba3bb (diff)
downloadluz-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.rs109
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())
+ }
+}