diff --git a/tokio-xmpp/src/xmlstream/mod.rs b/tokio-xmpp/src/xmlstream/mod.rs index 9a005ed2387843a4c98677316561a8c7b0f34162..66f4d01c4b57d82e47301f3a02120984bb9f9abe 100644 --- a/tokio-xmpp/src/xmlstream/mod.rs +++ b/tokio-xmpp/src/xmlstream/mod.rs @@ -52,10 +52,12 @@ mod initiator; mod responder; #[cfg(test)] mod tests; +pub(crate) mod xmpp; use self::common::{RawXmlStream, ReadXsoError, ReadXsoState, StreamHeader}; pub use self::initiator::{InitiatingStream, PendingFeaturesRecv}; pub use self::responder::{AcceptedStream, PendingFeaturesSend}; +pub use self::xmpp::XmppStreamElement; /// Initiate a new stream /// @@ -321,3 +323,6 @@ impl<'x, Io: AsyncWrite, T: FromXml + AsXml> Sink<&'x T> for XmlStream { Ok(()) } } + +/// Convenience alias for an XML stream using [`XmppStreamElement`]. +pub type XmppStream = XmlStream; diff --git a/tokio-xmpp/src/xmlstream/xmpp.rs b/tokio-xmpp/src/xmlstream/xmpp.rs new file mode 100644 index 0000000000000000000000000000000000000000..8e39aab465db5b4d07e559073693c13dca727326 --- /dev/null +++ b/tokio-xmpp/src/xmlstream/xmpp.rs @@ -0,0 +1,34 @@ +// Copyright (c) 2024 Jonas Schäfer +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +use xso::{AsXml, FromXml}; + +use xmpp_parsers::{iq::Iq, message::Message, presence::Presence, sasl, starttls}; + +/// Any valid XMPP stream-level element. +#[derive(FromXml, AsXml, Debug)] +#[xml()] +pub enum XmppStreamElement { + /// IQ stanza + #[xml(transparent)] + Iq(Iq), + + /// Message stanza + #[xml(transparent)] + Message(Message), + + /// Presence stanza + #[xml(transparent)] + Presence(Presence), + + /// SASL-related nonza + #[xml(transparent)] + Sasl(sasl::Nonza), + + /// STARTTLS-related nonza + #[xml(transparent)] + Starttls(starttls::Nonza), +}