1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
use reqwest::StatusCode; error_chain! { errors { NotFound Request(path: String, status: StatusCode, body: String) { description("request error") display("request error: path = '{}', status = '{}', body = '{}'", path, status, body) } InvalidResponse } foreign_links { Http(::reqwest::Error); Url(::reqwest::UrlError); Io(::std::io::Error); Json(::serde_json::Error); } } pub trait OptionalResult<T> { fn optional(self) -> Result<Option<T>>; } impl<T> OptionalResult<T> for Result<T> { fn optional(self) -> Result<Option<T>> { match self { Ok(v) => Ok(Some(v)), Err(Error(ErrorKind::NotFound, _)) => Ok(None), Err(e) => Err(e), } } }