pub use hyper::client::response::Response;
use hyper::{Client, Url};
use hyper::client::RequestBuilder;
use hyper::header::{Authorization, UserAgent};
use hyper::method::Method;
use std::sync::Arc;
use std::clone;
pub use hyper::client::Body;
pub struct HttpClient{
pub base_url: String,
api_key: String,
hyper_client: Arc<Client>,
user_agent: String,
}
impl HttpClient {
pub fn new(api_key: String, base_url: String) -> HttpClient {
HttpClient {
api_key: api_key,
base_url: base_url,
hyper_client: Arc::new(Client::new()),
user_agent: format!("algorithmia-rust/{} (Rust {}", option_env!("CARGO_PKG_VERSION").unwrap_or("unknown"), option_env!("CFG_RELEASE").unwrap_or("unknown")),
}
}
pub fn get(&self, url: Url) -> RequestBuilder {
self.build_request(Method::Get, url)
}
pub fn head(&self, url: Url) -> RequestBuilder {
self.build_request(Method::Head, url)
}
pub fn post(&self, url: Url) -> RequestBuilder {
self.build_request(Method::Post, url)
}
pub fn put(&self, url: Url) -> RequestBuilder {
self.build_request(Method::Put, url)
}
pub fn delete(&self, url: Url) -> RequestBuilder {
self.build_request(Method::Delete, url)
}
fn build_request(&self, verb: Method, url: Url) -> RequestBuilder {
let req = self.hyper_client.request(verb, url);
req.header(UserAgent(self.user_agent.clone()))
.header(Authorization(format!("Simple {}", self.api_key)))
}
}
impl clone::Clone for HttpClient {
fn clone(&self) -> HttpClient {
HttpClient {
api_key: self.api_key.clone(),
base_url: self.base_url.clone(),
hyper_client: self.hyper_client.clone(),
user_agent: self.user_agent.clone(),
}
}
}