Start creating custom errors instead of using bail! macro.
This commit is contained in:
parent
34d7391363
commit
064c2b4be0
@ -7,6 +7,7 @@ use native_tls;
|
||||
use url;
|
||||
|
||||
use std::io;
|
||||
// use std::fmt;
|
||||
|
||||
// fadsadfs NOT SYNC
|
||||
// #[derive(Fail, Debug)]
|
||||
@ -26,6 +27,7 @@ pub enum DataError {
|
||||
#[fail(display = "Hyper Error: {}", _0)]
|
||||
HyperError(#[cause] hyper::Error),
|
||||
#[fail(display = "Failed to parse a url: {}", _0)]
|
||||
// TODO: print the url too
|
||||
UrlError(#[cause] url::ParseError),
|
||||
#[fail(display = "TLS Error: {}", _0)]
|
||||
TLSError(#[cause] native_tls::Error),
|
||||
@ -34,8 +36,14 @@ pub enum DataError {
|
||||
#[fail(display = "RSS Error: {}", _0)]
|
||||
// Rss::Error is not yet Sync
|
||||
RssCrateError(String),
|
||||
#[fail(display = "WANNABE BAIL ERROR: {}", _0)]
|
||||
#[fail(display = "Error: {}", _0)]
|
||||
DiscountBail(String),
|
||||
#[fail(display = "Request to {} returned {}. Contex: {}", url, status_code, contex)]
|
||||
HttpStatusError {
|
||||
url: String,
|
||||
status_code: hyper::StatusCode,
|
||||
contex: String,
|
||||
},
|
||||
}
|
||||
|
||||
impl From<RunMigrationsError> for DataError {
|
||||
@ -85,3 +93,9 @@ impl From<io::Error> for DataError {
|
||||
DataError::IOError(err)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<String> for DataError {
|
||||
fn from(err: String) -> Self {
|
||||
DataError::DiscountBail(err)
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ extern crate derive_builder;
|
||||
extern crate diesel;
|
||||
#[macro_use]
|
||||
extern crate diesel_migrations;
|
||||
// #[macro_use]
|
||||
#[macro_use]
|
||||
extern crate failure;
|
||||
#[macro_use]
|
||||
extern crate failure_derive;
|
||||
|
||||
@ -210,7 +210,7 @@ impl NewEpisodeMinimal {
|
||||
|
||||
let duration = parser::parse_itunes_duration(item.itunes_ext());
|
||||
|
||||
Ok(NewEpisodeMinimalBuilder::default()
|
||||
NewEpisodeMinimalBuilder::default()
|
||||
.title(title)
|
||||
.uri(uri)
|
||||
.duration(duration)
|
||||
@ -218,7 +218,7 @@ impl NewEpisodeMinimal {
|
||||
.guid(guid)
|
||||
.podcast_id(parent_id)
|
||||
.build()
|
||||
.unwrap())
|
||||
.map_err(From::from)
|
||||
}
|
||||
|
||||
pub(crate) fn into_new_episode(self, item: &rss::Item) -> NewEpisode {
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
use diesel::SaveChangesDsl;
|
||||
// use failure::ResultExt;
|
||||
use rss::Channel;
|
||||
use url::Url;
|
||||
|
||||
@ -115,29 +116,64 @@ impl Source {
|
||||
let code = res.status();
|
||||
match code {
|
||||
StatusCode::NotModified => {
|
||||
return Err(DataError::DiscountBail(format!("304: skipping..")))
|
||||
let err = DataError::HttpStatusError {
|
||||
url: self.uri,
|
||||
status_code: code,
|
||||
contex: format!("304: skipping.."),
|
||||
};
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
StatusCode::MovedPermanently => {
|
||||
error!("Feed was moved permanently.");
|
||||
self.handle_301(&res)?;
|
||||
return Err(DataError::DiscountBail(format!(
|
||||
"301: Feed was moved permanently."
|
||||
)));
|
||||
|
||||
let err = DataError::HttpStatusError {
|
||||
url: self.uri,
|
||||
status_code: code,
|
||||
contex: format!("301: Feed was moved permanently."),
|
||||
};
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
StatusCode::TemporaryRedirect => debug!("307: Temporary Redirect."),
|
||||
StatusCode::PermanentRedirect => warn!("308: Permanent Redirect."),
|
||||
StatusCode::Unauthorized => {
|
||||
return Err(DataError::DiscountBail(format!("401: Unauthorized.")))
|
||||
let err = DataError::HttpStatusError {
|
||||
url: self.uri,
|
||||
status_code: code,
|
||||
contex: format!("401: Unauthorized."),
|
||||
};
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
StatusCode::Forbidden => {
|
||||
return Err(DataError::DiscountBail(format!("403: Forbidden.")))
|
||||
let err = DataError::HttpStatusError {
|
||||
url: self.uri,
|
||||
status_code: code,
|
||||
contex: format!("403: Forbidden."),
|
||||
};
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
StatusCode::NotFound => return Err(DataError::DiscountBail(format!("404: Not found."))),
|
||||
StatusCode::NotFound => return Err(format!("404: Not found.")).map_err(From::from),
|
||||
StatusCode::RequestTimeout => {
|
||||
return Err(DataError::DiscountBail(format!("408: Request Timeout.")))
|
||||
let err = DataError::HttpStatusError {
|
||||
url: self.uri,
|
||||
status_code: code,
|
||||
contex: format!("408: Request Timeout."),
|
||||
};
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
StatusCode::Gone => {
|
||||
return Err(DataError::DiscountBail(format!("410: Feed was deleted.")))
|
||||
let err = DataError::HttpStatusError {
|
||||
url: self.uri,
|
||||
status_code: code,
|
||||
contex: format!("410: Feed was deleted.."),
|
||||
};
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
_ => info!("HTTP StatusCode: {}", code),
|
||||
};
|
||||
@ -187,11 +223,11 @@ impl Source {
|
||||
let feed = self.request_constructor(client, ignore_etags)
|
||||
.and_then(move |(_, res)| response_to_channel(res, pool))
|
||||
.and_then(move |chan| {
|
||||
Ok(FeedBuilder::default()
|
||||
FeedBuilder::default()
|
||||
.channel(chan)
|
||||
.source_id(id)
|
||||
.build()
|
||||
.unwrap())
|
||||
.map_err(From::from)
|
||||
});
|
||||
|
||||
Box::new(feed)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user