From 197b1c83a426cd2a4b230434bdbcea1c23aaee33 Mon Sep 17 00:00:00 2001 From: ssrlive <30760636+ssrlive@users.noreply.github.com> Date: Sat, 25 Mar 2023 00:29:14 +0800 Subject: [PATCH] use thiserror to make error handler simple --- Cargo.toml | 1 + src/error.rs | 80 ++++++++++++++++++---------------------------------- 2 files changed, 28 insertions(+), 53 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1806523..466201d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ hashlink = "0.8" log = "0.4" mio = { version = "0.8", features = ["os-poll", "net", "os-ext"] } smoltcp = { version = "0.9", git = "https://github.com/smoltcp-rs/smoltcp.git", features = ["std"] } +thiserror = "1.0" url = "2.3" [dev-dependencies] diff --git a/src/error.rs b/src/error.rs index 4bd7f1d..dac60d7 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,76 +1,50 @@ -#[derive(Debug)] -pub struct Error { - message: String, -} +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("std::io::Error {0}")] + IoError(#[from] std::io::Error), -impl From for Error { - fn from(err: std::io::Error) -> Self { - From::::from(err.to_string()) - } -} + #[error("std::net::AddrParseError {0}")] + AddrParseError(#[from] std::net::AddrParseError), -impl From for Error { - fn from(err: std::net::AddrParseError) -> Self { - From::::from(err.to_string()) - } -} + #[error("smoltcp::iface::RouteTableFull {0:?}")] + RouteTableFull(#[from] smoltcp::iface::RouteTableFull), -impl From for Error { - fn from(err: smoltcp::iface::RouteTableFull) -> Self { - From::::from(format!("{err:?}")) - } -} + #[error("smoltcp::socket::tcp::RecvError {0:?}")] + RecvError(#[from] smoltcp::socket::tcp::RecvError), -impl From for Error { - fn from(err: smoltcp::socket::tcp::RecvError) -> Self { - From::::from(format!("{err:?}")) - } -} + #[error("smoltcp::socket::tcp::ListenError {0:?}")] + ListenError(#[from] smoltcp::socket::tcp::ListenError), -impl From for Error { - fn from(err: smoltcp::socket::tcp::ListenError) -> Self { - From::::from(format!("{err:?}")) - } -} + #[error("smoltcp::socket::udp::BindError {0:?}")] + BindError(#[from] smoltcp::socket::udp::BindError), -impl From for Error { - fn from(err: smoltcp::socket::udp::BindError) -> Self { - From::::from(format!("{err:?}")) - } -} + #[error("smoltcp::socket::tcp::SendError {0:?}")] + SendError(#[from] smoltcp::socket::tcp::SendError), -impl From for Error { - fn from(err: smoltcp::socket::tcp::SendError) -> Self { - From::::from(format!("{err:?}")) - } + #[error("&str {0}")] + Str(String), + + #[error("String {0}")] + String(String), + + #[error("&String {0}")] + RefString(String), } impl From<&str> for Error { fn from(err: &str) -> Self { - From::::from(err.to_string()) + Self::Str(err.to_string()) } } impl From for Error { fn from(err: String) -> Self { - Self { message: err } + Self::String(err) } } impl From<&String> for Error { fn from(err: &String) -> Self { - From::::from(err.to_string()) - } -} - -impl std::fmt::Display for Error { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", self.message) - } -} - -impl std::error::Error for Error { - fn description(&self) -> &str { - &self.message + Self::RefString(err.to_string()) } }