Examples for Error Documentation (#144)
This commit is contained in:
committed by
Sean McArthur
parent
0759f43ecb
commit
c8d03dd8b9
84
src/error.rs
84
src/error.rs
@@ -4,6 +4,51 @@ use std::fmt;
|
||||
use Url;
|
||||
|
||||
/// The Errors that may occur when processing a `Request`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #[macro_use]
|
||||
/// extern crate serde_derive;
|
||||
/// extern crate reqwest;
|
||||
///
|
||||
/// #[derive(Deserialize)]
|
||||
/// struct Simple {
|
||||
/// key: String
|
||||
/// }
|
||||
/// # fn main() { }
|
||||
///
|
||||
/// fn run() {
|
||||
/// match make_request() {
|
||||
/// Err(e) => handler(e),
|
||||
/// Ok(_) => return,
|
||||
/// }
|
||||
/// }
|
||||
/// // Response is not a json object conforming to the Simple struct
|
||||
/// fn make_request() -> Result<Simple, reqwest::Error> {
|
||||
/// reqwest::get("http://httpbin.org/ip")?.json()
|
||||
/// }
|
||||
///
|
||||
/// fn handler(e: reqwest::Error) {
|
||||
/// if e.is_http() {
|
||||
/// match e.url() {
|
||||
/// None => println!("No Url given"),
|
||||
/// Some(url) => println!("Problem making request to: {}", url),
|
||||
/// }
|
||||
/// }
|
||||
/// // Inspect the internal error and output it
|
||||
/// if e.is_serialization() {
|
||||
/// let serde_error = match e.get_ref() {
|
||||
/// None => return,
|
||||
/// Some(err) => err,
|
||||
/// };
|
||||
/// println!("problem parsing information {}", serde_error);
|
||||
/// }
|
||||
/// if e.is_redirect() {
|
||||
/// println!("server redirecting too many times or making loop");
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
#[derive(Debug)]
|
||||
pub struct Error {
|
||||
kind: Kind,
|
||||
@@ -15,6 +60,25 @@ pub type Result<T> = ::std::result::Result<T, Error>;
|
||||
|
||||
impl Error {
|
||||
/// Returns a possible URL related to this error.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// # fn run() {
|
||||
/// // displays last stop of a redirect loop
|
||||
/// let response = reqwest::get("http://site.with.redirect.loop");
|
||||
/// match response {
|
||||
/// Err(e) => if e.is_redirect() {
|
||||
/// let final_stop = match e.url() {
|
||||
/// Some(url) => url,
|
||||
/// None => return,
|
||||
/// };
|
||||
/// println!("Last redirect led to: {}", final_stop);
|
||||
/// },
|
||||
/// _ => return,
|
||||
/// };
|
||||
/// # }
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn url(&self) -> Option<&Url> {
|
||||
self.url.as_ref()
|
||||
@@ -24,6 +88,26 @@ impl Error {
|
||||
///
|
||||
/// The `'static` bounds allows using `downcast_ref` to check the
|
||||
/// details of the error.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// // retries requests with no host on localhost
|
||||
/// # fn run() {
|
||||
/// let invalid_request = "http://";
|
||||
/// let mut response = reqwest::get(invalid_request);
|
||||
/// match response {
|
||||
/// Err(e) => match e.get_ref() {
|
||||
/// Some(internal_error) => if internal_error.description() == "empty host" {
|
||||
/// let valid_request = format!("{}{}",invalid_request, "localhost");
|
||||
/// response = reqwest::get(&valid_request);
|
||||
/// },
|
||||
/// _ => return,
|
||||
/// },
|
||||
/// _ => return,
|
||||
/// };
|
||||
/// # }
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn get_ref(&self) -> Option<&(StdError + Send + Sync + 'static)> {
|
||||
match self.kind {
|
||||
|
||||
Reference in New Issue
Block a user