From 098ba7c7ed3eafbf4359809012f2e2cd0a646632 Mon Sep 17 00:00:00 2001 From: Hans Kratz Date: Thu, 2 Mar 2023 18:14:41 +0100 Subject: [PATCH 1/3] Requiring boxed errors to be Sync thereby making `Error` itself Sync. --- eventsource-client/src/error.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eventsource-client/src/error.rs b/eventsource-client/src/error.rs index 06fdb3c..a4c0ce8 100644 --- a/eventsource-client/src/error.rs +++ b/eventsource-client/src/error.rs @@ -6,11 +6,11 @@ pub enum Error { TimedOut, StreamClosed, /// An invalid request parameter - InvalidParameter(Box), + InvalidParameter(Box), /// The HTTP response could not be handled. UnexpectedResponse(StatusCode), /// An error reading from the HTTP response body. - HttpStream(Box), + HttpStream(Box), /// The HTTP response stream ended Eof, /// The HTTP response stream ended unexpectedly (e.g. in the @@ -20,11 +20,11 @@ pub enum Error { InvalidLine(String), InvalidEvent, /// Encountered a malformed Location header. - MalformedLocationHeader(Box), + MalformedLocationHeader(Box), /// Reached maximum redirect limit after encountering Location headers. MaxRedirectLimitReached(u32), /// An unexpected failure occurred. - Unexpected(Box), + Unexpected(Box), } impl PartialEq for Error { @@ -58,7 +58,7 @@ impl Error { impl From for Error where - E: std::error::Error + Send + 'static, + E: std::error::Error + Send + Sync + 'static, { fn from(e: E) -> Error { Error::Unexpected(Box::new(e)) From 3acfb4a4095d067260cfb17b2dad613ee6ea1201 Mon Sep 17 00:00:00 2001 From: Hans Kratz Date: Thu, 2 Mar 2023 18:44:27 +0100 Subject: [PATCH 2/3] implement std::fmt::Display and std::error::Error --- eventsource-client/src/error.rs | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/eventsource-client/src/error.rs b/eventsource-client/src/error.rs index a4c0ce8..69186da 100644 --- a/eventsource-client/src/error.rs +++ b/eventsource-client/src/error.rs @@ -27,6 +27,28 @@ pub enum Error { Unexpected(Box), } +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + use Error::*; + match self { + TimedOut => write!(f, "timed out"), + StreamClosed => write!(f, "stream closed"), + InvalidParameter(err) => write!(f, "invalid parameter: {err}"), + UnexpectedResponse(status_code) => write!(f, "unexpected response: {status_code}"), + HttpStream(err) => write!(f, "http error: {err}"), + Eof => write!(f, "eof"), + UnexpectedEof => write!(f, "unexpected eof"), + InvalidLine(line) => write!(f, "invalid line {line}"), + InvalidEvent => write!(f, "invalid event"), + MalformedLocationHeader(err) => write!(f, "malformed header: {err}"), + MaxRedirectLimitReached(limit) => write!(f, "maximum rediret limit reached: {limit}"), + Unexpected(_) => write!(f, "timed out"), + } + } +} + +impl std::error::Error for Error {} + impl PartialEq for Error { fn eq(&self, other: &Error) -> bool { use Error::*; @@ -56,13 +78,4 @@ impl Error { } } -impl From for Error -where - E: std::error::Error + Send + Sync + 'static, -{ - fn from(e: E) -> Error { - Error::Unexpected(Box::new(e)) - } -} - pub type Result = std::result::Result; From a6c82df62bd87c3482b4e27c8bc382ccacf6e0bb Mon Sep 17 00:00:00 2001 From: Hans Kratz Date: Thu, 2 Mar 2023 22:00:43 +0100 Subject: [PATCH 3/3] address review comments --- eventsource-client/src/error.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/eventsource-client/src/error.rs b/eventsource-client/src/error.rs index 69186da..80e4ccb 100644 --- a/eventsource-client/src/error.rs +++ b/eventsource-client/src/error.rs @@ -23,8 +23,6 @@ pub enum Error { MalformedLocationHeader(Box), /// Reached maximum redirect limit after encountering Location headers. MaxRedirectLimitReached(u32), - /// An unexpected failure occurred. - Unexpected(Box), } impl std::fmt::Display for Error { @@ -38,11 +36,10 @@ impl std::fmt::Display for Error { HttpStream(err) => write!(f, "http error: {err}"), Eof => write!(f, "eof"), UnexpectedEof => write!(f, "unexpected eof"), - InvalidLine(line) => write!(f, "invalid line {line}"), + InvalidLine(line) => write!(f, "invalid line: {line}"), InvalidEvent => write!(f, "invalid event"), MalformedLocationHeader(err) => write!(f, "malformed header: {err}"), - MaxRedirectLimitReached(limit) => write!(f, "maximum rediret limit reached: {limit}"), - Unexpected(_) => write!(f, "timed out"), + MaxRedirectLimitReached(limit) => write!(f, "maximum redirect limit reached: {limit}"), } } } @@ -72,7 +69,6 @@ impl Error { pub fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { match self { Error::HttpStream(err) => Some(err.as_ref()), - Error::Unexpected(err) => Some(err.as_ref()), _ => None, } }