From a5c975d113865a8f2e50d77db24dbb294fe39937 Mon Sep 17 00:00:00 2001 From: Kodi Craft Date: Fri, 5 Jul 2024 13:09:31 +0200 Subject: [PATCH] Attempt to change the way errors are created --- Cargo.lock | 21 +++++++++++++++++++++ Cargo.toml | 1 + src/lib.rs | 32 +++----------------------------- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cac092e..3e3db67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -306,6 +306,7 @@ dependencies = [ "ron", "serde", "syn", + "thiserror", "tokio", "tokio-test", ] @@ -973,6 +974,26 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "thread_local" version = "1.1.8" diff --git a/Cargo.toml b/Cargo.toml index b58b1ef..3f0df8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ tokio-test = "0.4.4" env_logger = { version = "0.11.3" } log = { version = "0.4.21" } console-subscriber = "0.3.0" +thiserror = "1.0.61" [lib] proc-macro = true diff --git a/src/lib.rs b/src/lib.rs index 66f91d2..f2bb3ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -352,39 +352,13 @@ fn derive_protocol(input: proc_macro2::TokenStream) -> proc_macro2::TokenStream // Create an error and result type for sending messages let error_enum = quote! { - #[derive(::std::fmt::Debug)] + #[derive(::std::fmt::Debug, ::std::clone::Clone, ::std::fmt::Display, ::thiserror::Error)] #vis enum #error_enum_name { + #[error("Failed to send query: {0}")] SendError(::tokio::sync::mpsc::error::SendError<(u64, #question_enum_name)>), + #[error("Connection to sender thread closed")] Closed, } - impl ::std::fmt::Display for #error_enum_name { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - match self { - #error_enum_name::SendError(e) => write!(f, "Failed to send query: {}", e), - #error_enum_name::Closed => write!(f, "Connection closed"), - } - } - } - impl ::std::error::Error for #error_enum_name { - fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> { - match self { - #error_enum_name::SendError(e) => ::std::option::Option::Some(e), - #error_enum_name::Closed => ::std::option::Option::None, - } - } - fn description(&self) -> &str { - match self { - #error_enum_name::SendError(_) => "Failed to send query", - #error_enum_name::Closed => "Connection closed", - } - } - fn cause(&self) -> ::std::option::Option<&dyn ::std::error::Error> { - match self { - #error_enum_name::SendError(e) => ::std::option::Option::Some(e), - #error_enum_name::Closed => ::std::option::Option::None, - } - } - } }; // Create enums for the types of messages the server and client will use