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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
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) } }