use std::str::Utf8Error; use quick_xml::events::attributes::AttrError; use rsasl::mechname::MechanismNameError; use crate::{ jid::ParseError, stanza::{self, ElementError, ElementParseError}, }; #[derive(Debug)] pub enum JabberError { Connection, BadStream, StartTlsUnavailable, TlsNegotiation, Utf8Decode, NoFeatures, UnknownNamespace, UnknownAttribute, NoID, NoType, IDMismatch, BindError, ElementParse(ElementParseError), ParseError, UnexpectedEnd, UnexpectedElement, UnexpectedText, XML(quick_xml::Error), SASL(SASLError), Element(ElementError<'static>), JID(ParseError), } #[derive(Debug)] pub enum SASLError { SASL(rsasl::prelude::SASLError), MechanismName(MechanismNameError), NoChallenge, NoSuccess, } impl From for JabberError { fn from(e: rsasl::prelude::SASLError) -> Self { Self::SASL(SASLError::SASL(e)) } } impl From for JabberError { fn from(e: MechanismNameError) -> Self { Self::SASL(SASLError::MechanismName(e)) } } impl From for JabberError { fn from(e: SASLError) -> Self { Self::SASL(e) } } impl From for JabberError { fn from(_e: Utf8Error) -> Self { Self::Utf8Decode } } impl From for JabberError { fn from(e: quick_xml::Error) -> Self { Self::XML(e) } } impl From> for JabberError { fn from(e: stanza::ElementError<'static>) -> Self { Self::Element(e) } } impl From for JabberError { fn from(e: AttrError) -> Self { Self::XML(e.into()) } } impl From for JabberError { fn from(e: ParseError) -> Self { Self::JID(e) } } impl From for JabberError { fn from(e: ElementParseError) -> Self { Self::ElementParse(e) } }