requests 0.0.30

Rust HTTP client API styled after awesome Python requests - [WORK IN PROGRESS]
Documentation
use hyper::client::{Client, IntoUrl};
use hyper::header::{Headers, Accept, UserAgent};
use hyper::net::HttpsConnector;
use hyper::Url;
#[cfg(feature = "ssl")]
use hyper_native_tls::NativeTlsClient;

use super::Response;
use super::Result;

const DEFAULT_USER_AGENT: &'static str = concat!("requests-rs/", env!("CARGO_PKG_VERSION"));


fn get_hyper_client(url: &Url) -> Client {
    if url.scheme() == "https" {
        let ssl = NativeTlsClient::new().unwrap();
        let connector = HttpsConnector::new(ssl);
        Client::with_connector(connector)
    } else {
        Client::new()
    }

}

#[derive(Debug)]
pub struct Request {
    headers: Headers,
}

impl Default for Request {
    fn default() -> Self {
        let mut request = Request::new();
        request.user_agent(DEFAULT_USER_AGENT);
        request
    }
}

impl Request {
    pub fn new() -> Self {
        Request { headers: Headers::new() }
    }

    pub fn json() -> Self {
        let mut request = Request::new();
        request.user_agent(DEFAULT_USER_AGENT);
        request.headers.set(Accept::json());
        request
    }

    pub fn user_agent(&mut self, ua: &str) {
        self.headers.set(UserAgent(ua.to_owned()))
    }

    pub fn get<U: IntoUrl>(&self, url: U) -> Result {
        let url = url.into_url()?;
        get_hyper_client(&url)
            .get(url)
            .headers(self.headers.clone())
            .send()
            .map(Response::from)
    }

    pub fn post<U: IntoUrl>(&self, url: U) -> Result {
        let url = url.into_url()?;
        get_hyper_client(&url)
            .post(url)
            .headers(self.headers.clone())
            .send()
            .map(Response::from)
    }

    pub fn put<U: IntoUrl>(&self, url: U) -> Result {
        let url = url.into_url()?;
        get_hyper_client(&url)
            .put(url)
            .headers(self.headers.clone())
            .send()
            .map(Response::from)
    }

    pub fn head<U: IntoUrl>(&self, url: U) -> Result {
        let url = url.into_url()?;
        get_hyper_client(&url)
            .head(url)
            .headers(self.headers.clone())
            .send()
            .map(Response::from)
    }

    pub fn delete<U: IntoUrl>(&self, url: U) -> Result {
        let url = url.into_url()?;
        get_hyper_client(&url)
            .delete(url)
            .headers(self.headers.clone())
            .send()
            .map(Response::from)
    }
}