extern crate hyper;
use hyper::header::{Accept, UserAgent, Authorization, Headers, qitem};
use hyper::mime::Mime;
use hyper::client::Client;
use hyper::status::StatusCode;
use types::*;
use error::*;
use std::io::Read;
pub fn default_headers(auth_token: AccessToken) -> Result<Headers> {
let mime: Mime = match "application/vnd.github.v3+json".parse() {
Ok(x) => x,
Err(_) => return Err(GithubError::LibError),
};
let mut token = String::from("token ");
token.push_str(&auth_token);
let mut headers = Headers::new();
headers.set(UserAgent(String::from("github-rs")));
headers.set(Authorization(token));
headers.set(Accept(vec![qitem(mime)]));
Ok(headers)
}
pub fn pagination(url: &mut String, page: Option<u64>, num_per: Option<u64>) {
if let Some(page_num) = page {
url.push_str("?page=");
url.push_str(&page_num.to_string());
}
if let Some(num) = num_per {
url.push_str("&per_page=");
url.push_str(&num.to_string());
}
}
pub fn get(url: &str, input_headers: Headers) -> Result<RawJSON> {
let client = Client::new();
let request = client.get(url);
let mut buffer = String::new();
let mut res = try_hyper!(request.headers(input_headers).send());
if let Err(err) = res.read_to_string(&mut buffer) {
Err(GithubError::LibIo(err))
} else {
Ok(buffer)
}
}
pub fn get_status_code(url: &str, input_headers: Headers) -> Result<StatusCode> {
let client = Client::new();
let request = client.get(url);
let res = try_hyper!(request.headers(input_headers).send());
Ok(res.status)
}
pub fn put(url: &str, input_headers: Headers) -> Result<StatusCode> {
let client = Client::new();
let request = client.put(url);
let res = try_hyper!(request.headers(input_headers).send());
Ok(res.status)
}
pub fn post(url: &str, input_headers: Headers, json: String) -> Result<RawJSON> {
let client = Client::new();
let request = client.post(url).body(json.as_bytes());
let mut buffer = String::new();
let mut res = try_hyper!(request.headers(input_headers).send());
if let Err(err) = res.read_to_string(&mut buffer) {
Err(GithubError::LibIo(err))
} else {
Ok(buffer)
}
}
pub fn delete(url: &str, input_headers: Headers) -> Result<StatusCode> {
let client = Client::new();
let request = client.delete(url);
let res = try_hyper!(request.headers(input_headers).send());
Ok(res.status)
}
pub fn delete_with_data(url: &str, input_headers: Headers, json: String) -> Result<StatusCode> {
let client = Client::new();
let request = client.delete(url).body(json.as_bytes());
let res = try_hyper!(request.headers(input_headers).send());
Ok(res.status)
}
pub fn patch(url: &str, input_headers: Headers, json: String) -> Result<RawJSON> {
let client = Client::new();
let request = client.patch(url).body(json.as_bytes());
let mut buffer = String::new();
let mut res = try_hyper!(request.headers(input_headers).send());
if let Err(err) = res.read_to_string(&mut buffer) {
Err(GithubError::LibIo(err))
} else {
Ok(buffer)
}
}