Input, Driver: Make error messages more idiomatic (#74)
This commit is contained in:
committed by
Kyle Simpson
parent
3e0793644f
commit
55e1567b90
@@ -6,7 +6,7 @@ use crate::{
|
||||
};
|
||||
use flume::SendError;
|
||||
use serde_json::Error as JsonError;
|
||||
use std::{error::Error as ErrorTrait, fmt, io::Error as IoError};
|
||||
use std::{error::Error as StdError, fmt, io::Error as IoError};
|
||||
use xsalsa20poly1305::aead::Error as CryptoError;
|
||||
|
||||
/// Errors encountered while connecting to a Discord voice server over the driver.
|
||||
@@ -84,27 +84,43 @@ impl From<WsError> for Error {
|
||||
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "Failed to connect to Discord RTP server: ")?;
|
||||
write!(f, "failed to connect to Discord RTP server: ")?;
|
||||
use Error::*;
|
||||
match self {
|
||||
AttemptDiscarded => write!(f, "connection attempt was aborted/discarded."),
|
||||
Crypto(c) => write!(f, "cryptography error {}.", c),
|
||||
CryptoModeInvalid => write!(f, "server changed negotiated encryption mode."),
|
||||
CryptoModeUnavailable => write!(f, "server did not offer chosen encryption mode."),
|
||||
EndpointUrl => write!(f, "endpoint URL received from gateway was invalid."),
|
||||
ExpectedHandshake => write!(f, "voice initialisation protocol was violated."),
|
||||
IllegalDiscoveryResponse =>
|
||||
write!(f, "IP discovery/NAT punching response was invalid."),
|
||||
IllegalIp => write!(f, "IP discovery/NAT punching response had bad IP value."),
|
||||
Io(i) => write!(f, "I/O failure ({}).", i),
|
||||
Json(j) => write!(f, "JSON (de)serialization issue ({}).", j),
|
||||
InterconnectFailure(r) => write!(f, "failed to contact other task ({:?})", r),
|
||||
Ws(w) => write!(f, "websocket issue ({:?}).", w),
|
||||
AttemptDiscarded => write!(f, "connection attempt was aborted/discarded"),
|
||||
Crypto(e) => e.fmt(f),
|
||||
CryptoModeInvalid => write!(f, "server changed negotiated encryption mode"),
|
||||
CryptoModeUnavailable => write!(f, "server did not offer chosen encryption mode"),
|
||||
EndpointUrl => write!(f, "endpoint URL received from gateway was invalid"),
|
||||
ExpectedHandshake => write!(f, "voice initialisation protocol was violated"),
|
||||
IllegalDiscoveryResponse => write!(f, "IP discovery/NAT punching response was invalid"),
|
||||
IllegalIp => write!(f, "IP discovery/NAT punching response had bad IP value"),
|
||||
Io(e) => e.fmt(f),
|
||||
Json(e) => e.fmt(f),
|
||||
InterconnectFailure(e) => write!(f, "failed to contact other task ({:?})", e),
|
||||
Ws(e) => write!(f, "websocket issue ({:?}).", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ErrorTrait for Error {}
|
||||
impl StdError for Error {
|
||||
fn source(&self) -> Option<&(dyn StdError + 'static)> {
|
||||
match self {
|
||||
Error::AttemptDiscarded => None,
|
||||
Error::Crypto(e) => e.source(),
|
||||
Error::CryptoModeInvalid => None,
|
||||
Error::CryptoModeUnavailable => None,
|
||||
Error::EndpointUrl => None,
|
||||
Error::ExpectedHandshake => None,
|
||||
Error::IllegalDiscoveryResponse => None,
|
||||
Error::IllegalIp => None,
|
||||
Error::Io(e) => e.source(),
|
||||
Error::Json(e) => e.source(),
|
||||
Error::InterconnectFailure(_) => None,
|
||||
Error::Ws(_) => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Convenience type for Discord voice/driver connection error handling.
|
||||
pub type Result<T> = std::result::Result<T, Error>;
|
||||
|
||||
Reference in New Issue
Block a user