use std::str::Utf8Error; use jid::ParseError; use rsasl::mechname::MechanismNameError; use stanza::client::error::Error as ClientError; use stanza::sasl::Failure; use stanza::stream::Error as StreamError; use tokio::task::JoinError; #[derive(Debug)] pub enum Error { Connection, Utf8Decode, Negotiation, TlsRequired, AlreadyTls, Unsupported, NoLocalpart, AlreadyConnecting, StreamClosed, UnexpectedElement(peanuts::Element), XML(peanuts::Error), Deserialization(peanuts::DeserializeError), SASL(SASLError), JID(ParseError), Authentication(Failure), ClientError(ClientError), StreamError(StreamError), MissingError, Disconnected, Connecting, JoinError(JoinError), } #[derive(Debug)] pub enum SASLError { SASL(rsasl::prelude::SASLError), MechanismName(MechanismNameError), } impl From for Error { fn from(e: rsasl::prelude::SASLError) -> Self { Self::SASL(SASLError::SASL(e)) } } impl From for Error { fn from(e: JoinError) -> Self { Self::JoinError(e) } } impl From for Error { fn from(e: peanuts::DeserializeError) -> Self { Error::Deserialization(e) } } impl From for Error { fn from(e: MechanismNameError) -> Self { Self::SASL(SASLError::MechanismName(e)) } } impl From for Error { fn from(e: SASLError) -> Self { Self::SASL(e) } } impl From for Error { fn from(_e: Utf8Error) -> Self { Self::Utf8Decode } } impl From for Error { fn from(e: peanuts::Error) -> Self { Self::XML(e) } } impl From for Error { fn from(e: ParseError) -> Self { Self::JID(e) } }