use {
reqwest::{Error as ReqwestError, Response},
serde::Deserialize,
std::result::Result as StdResult,
thiserror::Error,
tokio_tungstenite::tungstenite::Error as WebSocketError,
};
pub type SeriaResult<T = (), E = SeriaError> = StdResult<T, E>;
#[derive(Debug, Error)]
pub enum SeriaError {
#[error("HTTP error: {0}")]
Http(#[from] ReqwestError),
#[error("Request failed with non-success status: {0:?}")]
FailedRequest(Response),
#[error("WebSocket error: {0}")]
WebSocket(#[from] WebSocketError),
#[error("Authentication failure: {0}")]
Auth(#[from] AuthError),
#[error("Unhandled error: {0}")]
Other(String),
}
#[derive(Debug, Error, Deserialize, Clone, Copy, PartialEq)]
pub enum AuthError {
#[error("Uncategorized authentication error")]
LabelMe,
#[error("Server encountered an internal error")]
InternalError,
#[error("Invalid session token")]
InvalidSession,
#[error("Invalid username")]
OnboardingNotFinished,
#[error("Session already active")]
AlreadyAuthenticated,
}