use auth;
use curl::http;
use url::percent_encoding as pe;
use self::HttpRequestVerb::*;
#[derive(Clone,Copy,Debug)]
pub enum HttpRequestVerb {
GET,
POST,
}
pub trait EncodeBody {
fn encode(&self) -> Result<String, ::EdgeGridError>;
}
pub fn request(
egr: &auth::EdgeGridAuth,
relurl: &str,
body: Option<&str>,
verb: HttpRequestVerb
) -> ::EdgeGridResponse {
let newrel = &pe::utf8_percent_encode(relurl, pe::QUERY_ENCODE_SET)[..];
let mut url = String::from(egr.baseurl());
url.push_str(newrel);
debug!("URL: {}", url);
let header = try!(egr.auth_header(verb, newrel, body));
let mut handle = http::handle().timeout(egr.timeout());
let request = match verb {
GET => { handle.get(&url[..]) },
POST => { handle.post(&url[..], body.unwrap().as_bytes()) },
};
Ok(try!(request
.header("Content-Type", "application/json")
.header("Authorization", &header[..])
.exec()
))
}