xmpp-parsers: Stop reexporting extra symbols

Emmanuel Gil Peyrot created

Let’s continue reexporting jid and minidom, but not their inner pub
items, users of this crate can go one level deeper if they need that.

Only xso::error::Error is still useful to reexport, as this is part of
the public API of all of our parsers.

Change summary

parsers/examples/generate-caps.rs  |  3 +
parsers/src/attention.rs           |  2 
parsers/src/avatar.rs              |  2 
parsers/src/bind.rs                |  2 
parsers/src/bind2.rs               |  3 -
parsers/src/blocking.rs            |  2 
parsers/src/bob.rs                 |  2 
parsers/src/bookmarks.rs           |  2 
parsers/src/bookmarks2.rs          |  2 
parsers/src/caps.rs                |  2 
parsers/src/carbons.rs             |  2 
parsers/src/cert_management.rs     |  2 
parsers/src/chatstates.rs          |  2 
parsers/src/component.rs           |  2 
parsers/src/csi.rs                 |  2 
parsers/src/data_forms.rs          |  2 
parsers/src/data_forms_validate.rs |  6 ++-
parsers/src/delay.rs               |  2 
parsers/src/disco.rs               |  2 
parsers/src/ecaps2.rs              |  2 
parsers/src/eme.rs                 |  2 
parsers/src/extdisco.rs            |  2 
parsers/src/fast.rs                |  2 
parsers/src/forwarding.rs          |  2 
parsers/src/hashes.rs              |  2 
parsers/src/http_upload.rs         |  2 
parsers/src/ibb.rs                 |  2 
parsers/src/ibr.rs                 |  2 
parsers/src/idle.rs                |  2 
parsers/src/iq.rs                  |  2 
parsers/src/jid_prep.rs            |  2 
parsers/src/jingle.rs              |  2 
parsers/src/jingle_dtls_srtp.rs    |  2 
parsers/src/jingle_grouping.rs     |  2 
parsers/src/jingle_ibb.rs          |  2 
parsers/src/jingle_ice_udp.rs      |  2 
parsers/src/jingle_message.rs      |  2 
parsers/src/jingle_raw_udp.rs      |  2 
parsers/src/jingle_rtcp_fb.rs      |  2 
parsers/src/jingle_rtp.rs          |  2 
parsers/src/jingle_rtp_hdrext.rs   |  2 
parsers/src/jingle_s5b.rs          |  2 
parsers/src/jingle_ssma.rs         |  2 
parsers/src/legacy_omemo.rs        |  2 
parsers/src/lib.rs                 | 12 +++--
parsers/src/mam.rs                 |  2 
parsers/src/media_element.rs       |  2 
parsers/src/message.rs             |  2 
parsers/src/message_correct.rs     |  2 
parsers/src/mix.rs                 |  2 
parsers/src/mood.rs                |  2 
parsers/src/muc/muc.rs             |  2 
parsers/src/muc/user.rs            |  4 +-
parsers/src/nick.rs                |  2 
parsers/src/occupant_id.rs         |  2 
parsers/src/oob.rs                 |  2 
parsers/src/openpgp.rs             |  2 
parsers/src/ping.rs                |  2 
parsers/src/pubsub/event.rs        |  2 
parsers/src/pubsub/mod.rs          |  5 +-
parsers/src/pubsub/owner.rs        |  2 
parsers/src/pubsub/pubsub.rs       |  2 
parsers/src/reactions.rs           |  2 
parsers/src/receipts.rs            |  2 
parsers/src/roster.rs              |  2 
parsers/src/rsm.rs                 |  2 
parsers/src/rtt.rs                 |  2 
parsers/src/sasl.rs                |  2 
parsers/src/sm.rs                  |  2 
parsers/src/stanza_error.rs        |  2 
parsers/src/stanza_id.rs           |  2 
parsers/src/stream.rs              |  2 
parsers/src/time.rs                |  2 
parsers/src/tune.rs                |  2 
parsers/src/util/macros.rs         | 62 ++++++++++++++++----------------
parsers/src/vcard.rs               |  4 +-
parsers/src/vcard_update.rs        |  2 
parsers/src/version.rs             |  2 
parsers/src/websocket.rs           |  2 
79 files changed, 123 insertions(+), 118 deletions(-)

Detailed changes

parsers/examples/generate-caps.rs πŸ”—

@@ -11,7 +11,8 @@ use xmpp_parsers::{
     disco::DiscoInfoResult,
     ecaps2::{compute_disco as compute_disco_ecaps2, hash_ecaps2, ECaps2},
     hashes::Algo,
-    Element, Error,
+    minidom::Element,
+    Error,
 };
 
 fn get_caps(disco: &DiscoInfoResult, node: String) -> Result<Caps, String> {

parsers/src/attention.rs πŸ”—

@@ -18,7 +18,7 @@ impl MessagePayload for Attention {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     #[cfg(not(feature = "disable-validation"))]
     use xso::error::{Error, FromElementError};
 

parsers/src/avatar.rs πŸ”—

@@ -66,7 +66,7 @@ impl PubSubPayload for Data {}
 mod tests {
     use super::*;
     use crate::hashes::Algo;
-    use crate::Element;
+    use minidom::Element;
     #[cfg(not(feature = "disable-validation"))]
     use xso::error::{Error, FromElementError};
 

parsers/src/bind.rs πŸ”—

@@ -6,8 +6,8 @@
 
 use crate::iq::{IqResultPayload, IqSetPayload};
 use crate::ns;
-use crate::Element;
 use jid::{FullJid, Jid};
+use minidom::Element;
 use std::str::FromStr;
 use xso::error::{Error, FromElementError};
 

parsers/src/bind2.rs πŸ”—

@@ -6,7 +6,7 @@
 
 use crate::mam;
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 /// Represents the `<bind/>` element, as sent by the server in SASLβ€―2 to advertise which features
@@ -180,7 +180,6 @@ impl From<Bound> for Element {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/blocking.rs πŸ”—

@@ -8,8 +8,8 @@ use xso::{AsXml, FromXml};
 
 use crate::iq::{IqGetPayload, IqResultPayload, IqSetPayload};
 use crate::ns;
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use xso::error::FromElementError;
 
 /// The element requesting the blocklist, the result iq will contain a

parsers/src/bob.rs πŸ”—

@@ -114,7 +114,7 @@ pub struct Data {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::FromElementError;
 
     #[cfg(target_pointer_width = "32")]

parsers/src/bookmarks.rs πŸ”—

@@ -98,7 +98,7 @@ impl Storage {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/bookmarks2.rs πŸ”—

@@ -15,7 +15,7 @@
 //! This module exposes the [`Autojoin`][crate::bookmarks2::Autojoin] boolean flag, the [`Conference`][crate::bookmarks2::Conference] chatroom element, and the [BOOKMARKS2][crate::ns::BOOKMARKS2] XML namespace.
 
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 generate_attribute!(

parsers/src/caps.rs πŸ”—

@@ -9,10 +9,10 @@ use crate::disco::{DiscoInfoQuery, DiscoInfoResult, Feature, Identity};
 use crate::hashes::{Algo, Hash};
 use crate::ns;
 use crate::presence::PresencePayload;
-use crate::Element;
 use base64::{engine::general_purpose::STANDARD as Base64, Engine};
 use blake2::Blake2bVar;
 use digest::{Digest, Update, VariableOutput};
+use minidom::Element;
 use sha1::Sha1;
 use sha2::{Sha256, Sha512};
 use sha3::{Sha3_256, Sha3_512};

parsers/src/carbons.rs πŸ”—

@@ -60,7 +60,7 @@ impl MessagePayload for Sent {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/cert_management.rs πŸ”—

@@ -120,7 +120,7 @@ impl IqSetPayload for Revoke {}
 mod tests {
     use super::*;
     use crate::ns;
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
 
     #[cfg(target_pointer_width = "32")]

parsers/src/chatstates.rs πŸ”—

@@ -33,7 +33,7 @@ impl MessagePayload for ChatState {}
 mod tests {
     use super::*;
     use crate::ns;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[test]

parsers/src/component.rs πŸ”—

@@ -43,7 +43,7 @@ impl Handshake {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/csi.rs πŸ”—

@@ -27,7 +27,7 @@ pub struct Active;
 mod tests {
     use super::*;
     use crate::ns;
-    use crate::Element;
+    use minidom::Element;
 
     #[test]
     fn test_size() {

parsers/src/data_forms.rs πŸ”—

@@ -7,7 +7,7 @@
 use crate::data_forms_validate::Validate;
 use crate::media_element::MediaElement;
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 generate_element!(

parsers/src/data_forms_validate.rs πŸ”—

@@ -8,10 +8,12 @@ use std::fmt::{Display, Formatter};
 use std::str::FromStr;
 
 use minidom::{Element, IntoAttributeValue};
-use xso::{error::FromElementError, AsXml, FromXml};
+use xso::{
+    error::{Error, FromElementError},
+    AsXml, FromXml,
+};
 
 use crate::ns::{self, XDATA_VALIDATE};
-use crate::Error;
 
 /// Validation Method
 #[derive(Debug, Clone, PartialEq)]

parsers/src/delay.rs πŸ”—

@@ -35,8 +35,8 @@ impl PresencePayload for Delay {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
     use jid::BareJid;
+    use minidom::Element;
     use std::str::FromStr;
     use xso::error::{Error, FromElementError};
 

parsers/src/disco.rs πŸ”—

@@ -13,8 +13,8 @@ use crate::data_forms::{DataForm, DataFormType};
 use crate::iq::{IqGetPayload, IqResultPayload};
 use crate::ns;
 use crate::rsm::{SetQuery, SetResult};
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 
 /// Structure representing a `<query xmlns='http://jabber.org/protocol/disco#info'/>` element.
 ///

parsers/src/ecaps2.rs πŸ”—

@@ -186,7 +186,7 @@ pub fn query_ecaps2(hash: Hash) -> DiscoInfoQuery {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::FromElementError;
 
     #[cfg(target_pointer_width = "32")]

parsers/src/eme.rs πŸ”—

@@ -28,7 +28,7 @@ impl MessagePayload for ExplicitMessageEncryption {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/extdisco.rs πŸ”—

@@ -143,7 +143,7 @@ impl IqResultPayload for Credentials {}
 mod tests {
     use super::*;
     use crate::ns;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/fast.rs πŸ”—

@@ -77,7 +77,7 @@ pub struct Token {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
 
     #[test]

parsers/src/forwarding.rs πŸ”—

@@ -26,7 +26,7 @@ generate_element!(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/hashes.rs πŸ”—

@@ -244,7 +244,7 @@ impl Deref for Sha1HexAttribute {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::FromElementError;
 
     #[cfg(target_pointer_width = "32")]

parsers/src/http_upload.rs πŸ”—

@@ -11,7 +11,7 @@ use xso::{
 
 use crate::iq::{IqGetPayload, IqResultPayload};
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 
 /// Requesting a slot
 #[derive(FromXml, AsXml, Debug, Clone, PartialEq)]

parsers/src/ibb.rs πŸ”—

@@ -76,7 +76,7 @@ impl IqSetPayload for Close {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/ibr.rs πŸ”—

@@ -7,7 +7,7 @@
 use crate::data_forms::DataForm;
 use crate::iq::{IqGetPayload, IqResultPayload, IqSetPayload};
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use std::collections::HashMap;
 use xso::error::{Error, FromElementError};
 

parsers/src/idle.rs πŸ”—

@@ -24,7 +24,7 @@ impl PresencePayload for Idle {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
     use xso::error::{Error, FromElementError};
 

parsers/src/iq.rs πŸ”—

@@ -7,8 +7,8 @@
 
 use crate::ns;
 use crate::stanza_error::StanzaError;
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use minidom::IntoAttributeValue;
 use xso::error::{Error, FromElementError};
 

parsers/src/jid_prep.rs πŸ”—

@@ -43,8 +43,8 @@ impl IqResultPayload for JidPrepResponse {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
     use jid::FullJid;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle.rs πŸ”—

@@ -11,8 +11,8 @@ use crate::jingle_ice_udp::Transport as IceUdpTransport;
 use crate::jingle_rtp::Description as RtpDescription;
 use crate::jingle_s5b::Transport as Socks5Transport;
 use crate::ns;
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use std::collections::BTreeMap;
 use std::fmt;
 use std::str::FromStr;

parsers/src/jingle_dtls_srtp.rs πŸ”—

@@ -72,7 +72,7 @@ impl Fingerprint {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_grouping.rs πŸ”—

@@ -54,7 +54,7 @@ generate_element!(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_ibb.rs πŸ”—

@@ -24,7 +24,7 @@ attributes: [
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/jingle_ice_udp.rs πŸ”—

@@ -128,7 +128,7 @@ mod tests {
     use super::*;
     use crate::hashes::Algo;
     use crate::jingle_dtls_srtp::Setup;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_message.rs πŸ”—

@@ -6,7 +6,7 @@
 
 use crate::jingle::SessionId;
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 /// Defines a protocol for broadcasting Jingle requests to all of the clients

parsers/src/jingle_raw_udp.rs πŸ”—

@@ -68,7 +68,7 @@ pub struct Candidate {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_rtcp_fb.rs πŸ”—

@@ -24,7 +24,7 @@ pub struct RtcpFb {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_rtp.rs πŸ”—

@@ -154,7 +154,7 @@ pub struct Parameter {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_rtp_hdrext.rs πŸ”—

@@ -55,7 +55,7 @@ impl RtpHdrext {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/jingle_s5b.rs πŸ”—

@@ -5,8 +5,8 @@
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 use crate::ns;
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use std::net::IpAddr;
 use xso::error::{Error, FromElementError};
 

parsers/src/jingle_ssma.rs πŸ”—

@@ -83,7 +83,7 @@ generate_element!(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/legacy_omemo.rs πŸ”—

@@ -184,7 +184,7 @@ impl MessagePayload for Encrypted {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[test]
     fn parse_bundle() {

parsers/src/lib.rs πŸ”—

@@ -23,16 +23,18 @@
 
 #![warn(missing_docs)]
 
-pub use xso::error::{Error, FromElementError};
-// TODO: only export top-level module on the next major release
-pub use jid::{self, BareJid, Error as JidParseError, FullJid, Jid};
-pub use minidom::Element;
-
 pub use blake2;
+pub use jid;
+pub use minidom;
 pub use sha1;
 pub use sha2;
 pub use sha3;
 
+// We normally only reexport entire crates, but xso is a special case since it uses proc macros
+// which require it to be directly imported as a crate.  The only useful symbol we have to reexport
+// is its error type, which we expose in all of our return types.
+pub use xso::error::Error;
+
 /// XML namespace definitions used through XMPP.
 pub mod ns;
 

parsers/src/mam.rs πŸ”—

@@ -17,7 +17,7 @@ use crate::message::MessagePayload;
 use crate::ns;
 use crate::pubsub::NodeName;
 use crate::rsm::{SetQuery, SetResult};
-use crate::Element;
+use minidom::Element;
 use minidom::Node;
 
 generate_id!(

parsers/src/media_element.rs πŸ”—

@@ -46,7 +46,7 @@ generate_element!(
 mod tests {
     use super::*;
     use crate::data_forms::DataForm;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/message.rs πŸ”—

@@ -5,8 +5,8 @@
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 use crate::ns;
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use std::collections::BTreeMap;
 use xso::error::{Error, FromElementError};
 

parsers/src/message_correct.rs πŸ”—

@@ -24,7 +24,7 @@ impl MessagePayload for Replace {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/mix.rs πŸ”—

@@ -254,7 +254,7 @@ impl Destroy {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[test]
     fn participant() {

parsers/src/mood.rs πŸ”—

@@ -271,7 +271,7 @@ generate_elem_id!(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/muc/muc.rs πŸ”—

@@ -99,7 +99,7 @@ impl Muc {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
     use xso::error::{Error, FromElementError};
 

parsers/src/muc/user.rs πŸ”—

@@ -13,7 +13,7 @@ use xso::{
 use crate::message::MessagePayload;
 use crate::ns;
 use crate::presence::PresencePayload;
-use crate::Element;
+use minidom::Element;
 
 use jid::FullJid;
 
@@ -310,7 +310,7 @@ mod tests {
     use super::*;
     use crate::message::Message;
     use crate::presence::{Presence, Type as PresenceType};
-    use crate::Jid;
+    use jid::Jid;
 
     #[test]
     fn test_simple() {

parsers/src/nick.rs πŸ”—

@@ -14,7 +14,7 @@ generate_elem_id!(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     #[cfg(not(feature = "disable-validation"))]
     use xso::error::{Error, FromElementError};
 

parsers/src/occupant_id.rs πŸ”—

@@ -28,7 +28,7 @@ impl PresencePayload for OccupantId {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/oob.rs πŸ”—

@@ -23,7 +23,7 @@ impl MessagePayload for Oob {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/openpgp.rs πŸ”—

@@ -67,7 +67,7 @@ mod tests {
         pubsub::{Item as PubSubItem, Publish},
         Item, NodeName,
     };
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
 
     #[test]

parsers/src/ping.rs πŸ”—

@@ -21,7 +21,7 @@ impl IqGetPayload for Ping {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     #[cfg(not(feature = "disable-validation"))]
     use xso::error::{Error, FromElementError};
 

parsers/src/pubsub/event.rs πŸ”—

@@ -9,8 +9,8 @@ use crate::date::DateTime;
 use crate::message::MessagePayload;
 use crate::ns;
 use crate::pubsub::{Item as PubSubItem, ItemId, NodeName, Subscription, SubscriptionId};
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 /// Event wrapper for a PubSub `<item/>`.

parsers/src/pubsub/mod.rs πŸ”—

@@ -18,7 +18,8 @@ pub use self::event::PubSubEvent;
 pub use self::owner::PubSubOwner;
 pub use self::pubsub::PubSub;
 
-use crate::{Element, Jid};
+use jid::Jid;
+use minidom::Element;
 
 generate_id!(
     /// The name of a PubSub node, used to identify it on a JID.
@@ -105,4 +106,4 @@ impl Item {
 }
 
 /// This trait should be implemented on any element which can be included as a PubSub payload.
-pub trait PubSubPayload: ::std::convert::TryFrom<crate::Element> + Into<crate::Element> {}
+pub trait PubSubPayload: TryFrom<Element> + Into<Element> {}

parsers/src/pubsub/owner.rs πŸ”—

@@ -11,8 +11,8 @@ use crate::data_forms::DataForm;
 use crate::iq::{IqGetPayload, IqResultPayload, IqSetPayload};
 use crate::ns;
 use crate::pubsub::{AffiliationAttribute, NodeName, Subscription};
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 generate_element!(

parsers/src/pubsub/pubsub.rs πŸ”—

@@ -15,8 +15,8 @@ use crate::ns;
 use crate::pubsub::{
     AffiliationAttribute, Item as PubSubItem, NodeName, Subscription, SubscriptionId,
 };
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 
 // TODO: a better solution would be to split this into a query and a result elements, like for
 // XEP-0030.

parsers/src/reactions.rs πŸ”—

@@ -36,7 +36,7 @@ pub struct Reaction {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/receipts.rs πŸ”—

@@ -33,7 +33,7 @@ impl MessagePayload for Received {}
 mod tests {
     use super::*;
     use crate::ns;
-    use crate::Element;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/roster.rs πŸ”—

@@ -91,7 +91,7 @@ impl IqResultPayload for Roster {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
     use xso::error::{Error, FromElementError};
 

parsers/src/rsm.rs πŸ”—

@@ -5,7 +5,7 @@
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 /// Requests paging through a potentially big set of items (represented by an

parsers/src/rtt.rs πŸ”—

@@ -7,7 +7,7 @@
 use xso::{text::EmptyAsNone, AsXml, FromXml};
 
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 generate_attribute!(

parsers/src/sasl.rs πŸ”—

@@ -11,7 +11,7 @@ use xso::{
 };
 
 use crate::ns;
-use crate::Element;
+use minidom::Element;
 use std::collections::BTreeMap;
 
 generate_attribute!(

parsers/src/sm.rs πŸ”—

@@ -146,7 +146,7 @@ pub struct StreamManagement;
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/stanza_error.rs πŸ”—

@@ -7,8 +7,8 @@
 use crate::message::MessagePayload;
 use crate::ns;
 use crate::presence::PresencePayload;
-use crate::Element;
 use jid::Jid;
+use minidom::Element;
 use minidom::Node;
 use std::collections::BTreeMap;
 use std::convert::TryFrom;

parsers/src/stanza_id.rs πŸ”—

@@ -41,8 +41,8 @@ impl MessagePayload for OriginId {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
     use jid::BareJid;
+    use minidom::Element;
     use xso::error::{Error, FromElementError};
 
     #[cfg(target_pointer_width = "32")]

parsers/src/stream.rs πŸ”—

@@ -81,7 +81,7 @@ impl Stream {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/time.rs πŸ”—

@@ -9,8 +9,8 @@ use xso::{AsXml, FromXml};
 use crate::date::DateTime;
 use crate::iq::{IqGetPayload, IqResultPayload};
 use crate::ns;
-use crate::Element;
 use chrono::FixedOffset;
+use minidom::Element;
 use std::str::FromStr;
 use xso::error::{Error, FromElementError};
 

parsers/src/tune.rs πŸ”—

@@ -6,7 +6,7 @@
 
 use crate::ns;
 use crate::pubsub::PubSubPayload;
-use crate::Element;
+use minidom::Element;
 use xso::error::{Error, FromElementError};
 
 generate_elem_id!(

parsers/src/util/macros.rs πŸ”—

@@ -288,9 +288,9 @@ macro_rules! generate_element_enum {
                 $enum
             ),+
         }
-        impl ::std::convert::TryFrom<crate::Element> for $elem {
+        impl ::std::convert::TryFrom<minidom::Element> for $elem {
             type Error = xso::error::FromElementError;
-            fn try_from(elem: crate::Element) -> Result<$elem, xso::error::FromElementError> {
+            fn try_from(elem: minidom::Element) -> Result<$elem, xso::error::FromElementError> {
                 check_ns_only!(elem, $name, $ns);
                 check_no_children!(elem, $name);
                 check_no_attributes!(elem, $name);
@@ -300,9 +300,9 @@ macro_rules! generate_element_enum {
                 })
             }
         }
-        impl From<$elem> for crate::Element {
-            fn from(elem: $elem) -> crate::Element {
-                crate::Element::builder(
+        impl From<$elem> for minidom::Element {
+            fn from(elem: $elem) -> minidom::Element {
+                minidom::Element::builder(
                     match elem {
                         $($elem::$enum => $enum_name,)+
                     },
@@ -324,9 +324,9 @@ macro_rules! generate_attribute_enum {
                 $enum
             ),+
         }
-        impl ::std::convert::TryFrom<crate::Element> for $elem {
+        impl ::std::convert::TryFrom<minidom::Element> for $elem {
             type Error = xso::error::FromElementError;
-            fn try_from(elem: crate::Element) -> Result<$elem, xso::error::FromElementError> {
+            fn try_from(elem: minidom::Element) -> Result<$elem, xso::error::FromElementError> {
                 check_ns_only!(elem, $name, $ns);
                 check_no_children!(elem, $name);
                 check_no_unknown_attributes!(elem, $name, [$attr]);
@@ -336,9 +336,9 @@ macro_rules! generate_attribute_enum {
                 })
             }
         }
-        impl From<$elem> for crate::Element {
-            fn from(elem: $elem) -> crate::Element {
-                crate::Element::builder($name, crate::ns::$ns)
+        impl From<$elem> for minidom::Element {
+            fn from(elem: $elem) -> minidom::Element {
+                minidom::Element::builder($name, crate::ns::$ns)
                     .attr($attr, match elem {
                          $($elem::$enum => $enum_name,)+
                      })
@@ -467,9 +467,9 @@ macro_rules! generate_elem_id {
         $(#[$meta])*
         #[derive(Debug, Clone, PartialEq, Eq, Hash)]
         pub struct $elem(pub $type);
-        impl ::std::convert::TryFrom<crate::Element> for $elem {
+        impl ::std::convert::TryFrom<minidom::Element> for $elem {
             type Error = xso::error::FromElementError;
-            fn try_from(elem: crate::Element) -> Result<$elem, xso::error::FromElementError> {
+            fn try_from(elem: minidom::Element) -> Result<$elem, xso::error::FromElementError> {
                 check_self!(elem, $name, $ns);
                 check_no_children!(elem, $name);
                 check_no_attributes!(elem, $name);
@@ -477,9 +477,9 @@ macro_rules! generate_elem_id {
                 Ok($elem(elem.text().parse().map_err(xso::error::Error::text_parse_error)?))
             }
         }
-        impl From<$elem> for crate::Element {
-            fn from(elem: $elem) -> crate::Element {
-                crate::Element::builder($name, crate::ns::$ns)
+        impl From<$elem> for minidom::Element {
+            fn from(elem: $elem) -> minidom::Element {
+                minidom::Element::builder($name, crate::ns::$ns)
                     .append(elem.0.to_string())
                     .build()
             }
@@ -637,27 +637,27 @@ macro_rules! finish_parse_elem {
 macro_rules! generate_serialiser {
     ($builder:ident, $parent:ident, $elem:ident, Required, String, ($name:tt, $ns:ident)) => {
         $builder.append(
-            crate::Element::builder($name, crate::ns::$ns)
+            minidom::Element::builder($name, crate::ns::$ns)
                 .append(::minidom::Node::Text($parent.$elem)),
         )
     };
     ($builder:ident, $parent:ident, $elem:ident, Option, String, ($name:tt, $ns:ident)) => {
         $builder.append_all($parent.$elem.map(|elem| {
-            crate::Element::builder($name, crate::ns::$ns).append(::minidom::Node::Text(elem))
+            minidom::Element::builder($name, crate::ns::$ns).append(::minidom::Node::Text(elem))
         }))
     };
     ($builder:ident, $parent:ident, $elem:ident, Option, $constructor:ident, ($name:tt, *)) => {
         $builder.append_all(
             $parent
                 .$elem
-                .map(|elem| ::minidom::Node::Element(crate::Element::from(elem))),
+                .map(|elem| ::minidom::Node::Element(minidom::Element::from(elem))),
         )
     };
     ($builder:ident, $parent:ident, $elem:ident, Option, $constructor:ident, ($name:tt, $ns:ident)) => {
         $builder.append_all(
             $parent
                 .$elem
-                .map(|elem| ::minidom::Node::Element(crate::Element::from(elem))),
+                .map(|elem| ::minidom::Node::Element(minidom::Element::from(elem))),
         )
     };
     ($builder:ident, $parent:ident, $elem:ident, Vec, $constructor:ident, ($name:tt, $ns:ident)) => {
@@ -667,11 +667,11 @@ macro_rules! generate_serialiser {
         $builder.append_all(
             $parent
                 .$elem
-                .then(|| crate::Element::builder($name, crate::ns::$ns)),
+                .then(|| minidom::Element::builder($name, crate::ns::$ns)),
         )
     };
     ($builder:ident, $parent:ident, $elem:ident, $_:ident, $constructor:ident, ($name:tt, $ns:ident)) => {
-        $builder.append(::minidom::Node::Element(crate::Element::from(
+        $builder.append(::minidom::Node::Element(minidom::Element::from(
             $parent.$elem,
         )))
     };
@@ -734,10 +734,10 @@ macro_rules! generate_element {
             }
         }
 
-        impl ::std::convert::TryFrom<crate::Element> for $elem {
+        impl ::std::convert::TryFrom<minidom::Element> for $elem {
             type Error = xso::error::FromElementError;
 
-            fn try_from(mut elem: crate::Element) -> Result<$elem, xso::error::FromElementError> {
+            fn try_from(mut elem: minidom::Element) -> Result<$elem, xso::error::FromElementError> {
                 check_self!(elem, $name, $ns);
                 check_no_unknown_attributes!(elem, $name, [$($attr_name),*]);
                 $(
@@ -790,9 +790,9 @@ macro_rules! generate_element {
             }
         }
 
-        impl From<$elem> for crate::Element {
-            fn from(elem: $elem) -> crate::Element {
-                let mut builder = crate::Element::builder($name, crate::ns::$ns);
+        impl From<$elem> for minidom::Element {
+            fn from(elem: $elem) -> minidom::Element {
+                let mut builder = minidom::Element::builder($name, crate::ns::$ns);
                 $(
                     builder = builder.attr($attr_name, elem.$attr);
                 )*
@@ -827,10 +827,10 @@ macro_rules! assert_size (
 // TODO: move that to src/pubsub/mod.rs, once we figure out how to use macros from there.
 macro_rules! impl_pubsub_item {
     ($item:ident, $ns:ident) => {
-        impl ::std::convert::TryFrom<crate::Element> for $item {
+        impl ::std::convert::TryFrom<minidom::Element> for $item {
             type Error = FromElementError;
 
-            fn try_from(mut elem: crate::Element) -> Result<$item, FromElementError> {
+            fn try_from(mut elem: minidom::Element) -> Result<$item, FromElementError> {
                 check_self!(elem, "item", $ns);
                 check_no_unknown_attributes!(elem, "item", ["id", "publisher"]);
                 let mut payloads = elem.take_contents_as_children().collect::<Vec<_>>();
@@ -846,9 +846,9 @@ macro_rules! impl_pubsub_item {
             }
         }
 
-        impl From<$item> for crate::Element {
-            fn from(item: $item) -> crate::Element {
-                crate::Element::builder("item", ns::$ns)
+        impl From<$item> for minidom::Element {
+            fn from(item: $item) -> minidom::Element {
+                minidom::Element::builder("item", ns::$ns)
                     .attr("id", item.0.id)
                     .attr("publisher", item.0.publisher)
                     .append_all(item.0.payload)

parsers/src/vcard.rs πŸ”—

@@ -13,11 +13,11 @@
 //! For vCard updates defined in [XEP-0153](https://xmpp.org/extensions/xep-0153.html),
 //! see [`vcard_update`][crate::vcard_update] module.
 
-use xso::{AsXml, FromXml};
+use xso::{error::Error, AsXml, FromXml};
 
 use crate::iq::{IqGetPayload, IqResultPayload, IqSetPayload};
+use crate::ns;
 use crate::util::text_node_codecs::{Codec, WhitespaceAwareBase64};
-use crate::{ns, Error};
 use minidom::Element;
 
 generate_element!(

parsers/src/vcard_update.rs πŸ”—

@@ -35,7 +35,7 @@ generate_element!(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
     use std::str::FromStr;
 
     #[test]

parsers/src/version.rs πŸ”—

@@ -42,7 +42,7 @@ impl IqResultPayload for VersionResult {}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]

parsers/src/websocket.rs πŸ”—

@@ -80,7 +80,7 @@ impl Open {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Element;
+    use minidom::Element;
 
     #[cfg(target_pointer_width = "32")]
     #[test]