Move error to separate file

This commit is contained in:
Joscha 2024-12-06 03:22:57 +01:00
parent 6f0e08350e
commit 3e6ee77834
3 changed files with 66 additions and 48 deletions

View file

@ -1,6 +1,6 @@
//! Basic connection between client and server. //! Basic connection between client and server.
use std::{error, fmt, result, time::Duration}; use std::{fmt, time::Duration};
use futures_util::{SinkExt, StreamExt}; use futures_util::{SinkExt, StreamExt};
use jiff::Timestamp; use jiff::Timestamp;
@ -11,56 +11,14 @@ use tokio::{
time::{self, Instant}, time::{self, Instant},
}; };
use tokio_tungstenite::{ use tokio_tungstenite::{
tungstenite::{self, client::IntoClientRequest, handshake::client::Response, Message}, tungstenite::{client::IntoClientRequest, handshake::client::Response, Message},
MaybeTlsStream, WebSocketStream, MaybeTlsStream, WebSocketStream,
}; };
use crate::api::{Data, Packet, PacketType, ParsedPacket, Ping, PingEvent, PingReply, Time}; use crate::{
api::{Data, Packet, PacketType, ParsedPacket, Ping, PingEvent, PingReply, Time},
/// An error that can occur while using an [`EuphConn`]. error::{Error, Result},
#[derive(Debug)] };
pub enum Error {
/// The connection is closed.
ConnectionClosed,
/// A ping was not replied to in time.
PingTimeout,
/// A packet was not sent because it was malformed.
MalformedPacket(serde_json::Error),
/// A malformed packet was received.
ReceivedMalformedPacket(serde_json::Error),
/// A binary message was received.
ReceivedBinaryMessage,
Tungstenite(tungstenite::Error),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::ConnectionClosed => write!(f, "connection closed"),
Self::PingTimeout => write!(f, "ping timed out"),
Self::MalformedPacket(err) => write!(f, "malformed packet: {err}"),
Self::ReceivedMalformedPacket(err) => write!(f, "received malformed packet: {err}"),
Self::ReceivedBinaryMessage => write!(f, "received binary message"),
Self::Tungstenite(err) => write!(f, "{err}"),
}
}
}
impl error::Error for Error {}
impl From<tungstenite::Error> for Error {
fn from(err: tungstenite::Error) -> Self {
Self::Tungstenite(err)
}
}
/// An alias of [`Result`](result::Result) for [`Error`].
pub type Result<T> = result::Result<T, Error>;
/// Which side of the connection we're on. /// Which side of the connection we're on.
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]

59
src/error.rs Normal file
View file

@ -0,0 +1,59 @@
//! Error handling.
use std::fmt;
use tokio_tungstenite::tungstenite;
use crate::api::PacketType;
/// Possible euphoria communication errors.
#[derive(Debug)]
pub enum Error {
/// The connection is closed.
ConnectionClosed,
/// A ping was not replied to in time.
PingTimeout,
/// A packet was not sent because it was malformed.
MalformedPacket(serde_json::Error),
/// A binary message was received.
ReceivedBinaryMessage,
/// A malformed packet was received.
ReceivedMalformedPacket(serde_json::Error),
/// An unexpected packet was received.
ReceivedUnexpectedPacket(PacketType),
/// A tungstenite error.
Tungstenite(tungstenite::Error),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::ConnectionClosed => write!(f, "connection closed"),
Self::PingTimeout => write!(f, "ping timed out"),
Self::MalformedPacket(err) => write!(f, "malformed packet: {err}"),
Self::ReceivedBinaryMessage => write!(f, "received binary message"),
Self::ReceivedMalformedPacket(err) => write!(f, "received malformed packet: {err}"),
Self::ReceivedUnexpectedPacket(ptype) => {
write!(f, "received packet of unexpected type: {ptype}")
}
Self::Tungstenite(err) => write!(f, "{err}"),
}
}
}
impl std::error::Error for Error {}
impl From<tungstenite::Error> for Error {
fn from(err: tungstenite::Error) -> Self {
Self::Tungstenite(err)
}
}
/// An alias of [`Result`](std::result::Result) for [`Error`].
pub type Result<T> = std::result::Result<T, Error>;

View file

@ -1,6 +1,7 @@
pub mod api; pub mod api;
pub mod conn; pub mod conn;
mod emoji; mod emoji;
pub mod error;
pub mod nick; pub mod nick;
mod replies; mod replies;