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