diff options
Diffstat (limited to '')
| -rw-r--r-- | stanza/src/client/error.rs | 4 | ||||
| -rw-r--r-- | stanza/src/client/iq.rs | 22 | ||||
| -rw-r--r-- | stanza/src/client/message.rs | 90 | ||||
| -rw-r--r-- | stanza/src/client/mod.rs | 4 | ||||
| -rw-r--r-- | stanza/src/client/presence.rs | 4 |
5 files changed, 124 insertions, 0 deletions
diff --git a/stanza/src/client/error.rs b/stanza/src/client/error.rs index 9cc85a9..7dac178 100644 --- a/stanza/src/client/error.rs +++ b/stanza/src/client/error.rs @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden> +// +// SPDX-License-Identifier: AGPL-3.0-or-later + use std::fmt::Display; use std::str::FromStr; diff --git a/stanza/src/client/iq.rs b/stanza/src/client/iq.rs index 478530a..be2a3f1 100644 --- a/stanza/src/client/iq.rs +++ b/stanza/src/client/iq.rs @@ -1,8 +1,14 @@ +// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden> +// +// SPDX-License-Identifier: AGPL-3.0-or-later + use std::str::FromStr; use jid::JID; use peanuts::{DeserializeError, Element, FromElement, IntoElement, XML_NS}; +#[cfg(feature = "xep_0280")] +use crate::xep_0280::{self, Disable, Enable}; use crate::{ bind::{self, Bind}, client::error::Error, @@ -53,6 +59,10 @@ pub enum Query { Ping(Ping), #[cfg(feature = "rfc_6121")] Roster(roster::Query), + #[cfg(feature = "xep_0280")] + CarbonsEnable(Enable), + #[cfg(feature = "xep_0280")] + CarbonsDisable(Disable), Unsupported, } @@ -80,6 +90,14 @@ impl FromElement for Query { (Some(xep_0060::owner::XMLNS), "pubsub") => Ok(Query::PubsubOwner( xep_0060::owner::Pubsub::from_element(element)?, )), + #[cfg(feature = "xep_0280")] + (Some(xep_0280::XMLNS), "enable") => { + Ok(Query::CarbonsEnable(Enable::from_element(element)?)) + } + #[cfg(feature = "xep_0280")] + (Some(xep_0280::XMLNS), "disable") => { + Ok(Query::CarbonsDisable(Disable::from_element(element)?)) + } _ => Ok(Query::Unsupported), } } @@ -103,6 +121,10 @@ impl IntoElement for Query { Query::Pubsub(pubsub) => pubsub.builder(), #[cfg(feature = "xep_0060")] Query::PubsubOwner(pubsub) => pubsub.builder(), + #[cfg(feature = "xep_0280")] + Query::CarbonsEnable(enable) => enable.builder(), + #[cfg(feature = "xep_0280")] + Query::CarbonsDisable(disable) => disable.builder(), } } } diff --git a/stanza/src/client/message.rs b/stanza/src/client/message.rs index 41761d2..a489201 100644 --- a/stanza/src/client/message.rs +++ b/stanza/src/client/message.rs @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden> +// +// SPDX-License-Identifier: AGPL-3.0-or-later + use std::str::FromStr; use jid::JID; @@ -11,6 +15,12 @@ use crate::xep_0131::Headers; use crate::xep_0172::Nick; #[cfg(feature = "xep_0203")] use crate::xep_0203::Delay; +#[cfg(feature = "xep_0280")] +use crate::xep_0280::{Private, Received, Sent}; +#[cfg(feature = "xep_0297")] +use crate::xep_0297::Forwarded; +#[cfg(feature = "xep_0334")] +use crate::xep_0334::{NoCopy, NoPermanentStore, NoStore, Store}; use super::XMLNS; @@ -34,6 +44,22 @@ pub struct Message { pub nick: Option<Nick>, #[cfg(feature = "xep_0060")] pub event: Option<Event>, + #[cfg(feature = "xep_0297")] + pub forwarded: Option<Forwarded>, + #[cfg(feature = "xep_0280")] + pub sent: Option<Sent>, + #[cfg(feature = "xep_0280")] + pub received: Option<Received>, + #[cfg(feature = "xep_0280")] + pub private: Option<Private>, + #[cfg(feature = "xep_0334")] + pub no_permanent_store: Option<NoPermanentStore>, + #[cfg(feature = "xep_0334")] + pub no_store: Option<NoStore>, + #[cfg(feature = "xep_0334")] + pub no_copy: Option<NoCopy>, + #[cfg(feature = "xep_0334")] + pub store: Option<Store>, } impl FromElement for Message { @@ -63,6 +89,30 @@ impl FromElement for Message { #[cfg(feature = "xep_0060")] let event = element.child_opt()?; + #[cfg(feature = "xep_0297")] + let forwarded = element.child_opt()?; + + #[cfg(feature = "xep_0280")] + let sent = element.child_opt()?; + + #[cfg(feature = "xep_0280")] + let received = element.child_opt()?; + + #[cfg(feature = "xep_0280")] + let private = element.child_opt()?; + + #[cfg(feature = "xep_0334")] + let no_permanent_store = element.child_opt()?; + + #[cfg(feature = "xep_0334")] + let no_store = element.child_opt()?; + + #[cfg(feature = "xep_0334")] + let no_copy = element.child_opt()?; + + #[cfg(feature = "xep_0334")] + let store = element.child_opt()?; + Ok(Message { from, id, @@ -80,6 +130,22 @@ impl FromElement for Message { nick, #[cfg(feature = "xep_0060")] event, + #[cfg(feature = "xep_0297")] + forwarded, + #[cfg(feature = "xep_0280")] + sent, + #[cfg(feature = "xep_0280")] + received, + #[cfg(feature = "xep_0280")] + private, + #[cfg(feature = "xep_0334")] + no_permanent_store, + #[cfg(feature = "xep_0334")] + no_store, + #[cfg(feature = "xep_0334")] + no_copy, + #[cfg(feature = "xep_0334")] + store, }) } } @@ -114,6 +180,30 @@ impl IntoElement for Message { #[cfg(feature = "xep_0060")] let builder = builder.push_child_opt(self.event.clone()); + #[cfg(feature = "xep_0297")] + let builder = builder.push_child_opt(self.forwarded.clone()); + + #[cfg(feature = "xep_0280")] + let builder = builder.push_child_opt(self.sent.clone()); + + #[cfg(feature = "xep_0280")] + let builder = builder.push_child_opt(self.received.clone()); + + #[cfg(feature = "xep_0280")] + let builder = builder.push_child_opt(self.private.clone()); + + #[cfg(feature = "xep_0334")] + let builder = builder.push_child_opt(self.no_permanent_store); + + #[cfg(feature = "xep_0334")] + let builder = builder.push_child_opt(self.no_store); + + #[cfg(feature = "xep_0334")] + let builder = builder.push_child_opt(self.no_copy); + + #[cfg(feature = "xep_0334")] + let builder = builder.push_child_opt(self.store); + builder } } diff --git a/stanza/src/client/mod.rs b/stanza/src/client/mod.rs index aca4fad..00ad3ed 100644 --- a/stanza/src/client/mod.rs +++ b/stanza/src/client/mod.rs @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden> +// +// SPDX-License-Identifier: AGPL-3.0-or-later + use peanuts::{Content, ContentBuilder, DeserializeError, FromContent, FromElement, IntoContent}; use iq::Iq; diff --git a/stanza/src/client/presence.rs b/stanza/src/client/presence.rs index b0a0bc0..02de229 100644 --- a/stanza/src/client/presence.rs +++ b/stanza/src/client/presence.rs @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 cel <cel@bunny.garden> +// +// SPDX-License-Identifier: AGPL-3.0-or-later + use std::str::FromStr; use jid::JID; |
