From c66b0bf37c52b8ba93a3b5b8e4053c2af1e86d4f Mon Sep 17 00:00:00 2001 From: leo60228 Date: Tue, 13 Oct 2020 14:50:28 -0400 Subject: [PATCH] Switch to thiserror (BREAKING) --- Cargo.toml | 6 +++--- src/reqwest.rs | 46 ++++++++++++++++++---------------------------- tests/reqwest.rs | 6 +++--- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 14f4ecd..ad2027d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "eventsource" -version = "0.5.0" +version = "0.6.0" authors = ["Lukas Werling "] edition = "2018" @@ -13,9 +13,9 @@ keywords = ["http"] default = ["with-reqwest"] # Enable the reqwest-based client. -with-reqwest = ["reqwest"] +with-reqwest = ["reqwest", "thiserror"] [dependencies] -error-chain = "0.12.2" +thiserror = { version = "1.0.21", optional = true } reqwest = { version = "0.10.4", features = ["blocking"], optional = true } mime = "0.3.7" diff --git a/src/reqwest.rs b/src/reqwest.rs index edb9f2e..6da601b 100644 --- a/src/reqwest.rs +++ b/src/reqwest.rs @@ -1,34 +1,24 @@ //! # Reqwest-based EventSource client -mod errors { - use error_chain::*; - error_chain! { - foreign_links { - Reqwest(reqwest::Error); - Io(::std::io::Error); - } - - errors { - Http(status: reqwest::StatusCode) { - description("HTTP request failed") - display("HTTP status code: {}", status) - } - InvalidContentType(mime_type: mime::Mime) { - description("unexpected Content-Type header") - display("unexpected Content-Type: {}", mime_type) - } - NoContentType { - description("no Content-Type header in response") - display("Content-Type missing") - } - } - } +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("{0}")] + Reqwest(#[from] reqwest::Error), + #[error("{0}")] + Io(#[from] std::io::Error), + #[error("HTTP status code: {0}")] + Http(reqwest::StatusCode), + #[error("unexpected Content-Type: {0}")] + InvalidContentType(mime::Mime), + #[error("Content-Type missing")] + NoContentType, } -pub use self::errors::*; +pub type Result = std::result::Result; + +use super::event::{parse_event_line, Event, ParseResult}; use reqwest::blocking as reqw; use reqwest::header::{HeaderMap, HeaderValue, ACCEPT, CONTENT_TYPE}; -use super::event::{parse_event_line, Event, ParseResult}; use std::io::{BufRead, BufReader}; use std::time::{Duration, Instant}; @@ -84,7 +74,7 @@ impl Client { { let status = res.status(); if !status.is_success() { - return Err(ErrorKind::Http(status.clone()).into()); + return Err(Error::Http(status.clone())); } if let Some(content_type_hv) = res.headers().get(CONTENT_TYPE) { @@ -98,10 +88,10 @@ impl Client { if (content_type.type_(), content_type.subtype()) != (mime::TEXT, mime::EVENT_STREAM) { - return Err(ErrorKind::InvalidContentType(content_type.clone()).into()); + return Err(Error::InvalidContentType(content_type.clone())); } } else { - return Err(ErrorKind::NoContentType.into()); + return Err(Error::NoContentType); } } diff --git a/tests/reqwest.rs b/tests/reqwest.rs index 7298320..429a1bb 100644 --- a/tests/reqwest.rs +++ b/tests/reqwest.rs @@ -1,4 +1,4 @@ -use eventsource::reqwest::{Client, Error, ErrorKind}; +use eventsource::reqwest::{Client, Error}; use reqwest::Url; use std::time::Duration; @@ -79,7 +79,7 @@ fn missing_content_type() { let mut client = Client::new(Url::parse(&s.url("/")).unwrap()); match client.next().unwrap() { - Err(Error(ErrorKind::NoContentType, _)) => assert!(true), + Err(Error::NoContentType) => assert!(true), _ => assert!(false, "NoContentType error expected"), } } @@ -97,7 +97,7 @@ fn invalid_content_type() { let mut client = Client::new(Url::parse(&s.url("/")).unwrap()); match client.next().unwrap() { - Err(Error(ErrorKind::InvalidContentType(_), _)) => assert!(true), + Err(Error::InvalidContentType(_)) => assert!(true), _ => assert!(false, "InvalidContentType error expected"), } }