extern crate chrono;
#[macro_use]
extern crate hyper;
#[macro_use]
extern crate lazy_static;
extern crate mime;
extern crate rustc_serialize;
pub mod helpers;
pub mod methods;
pub mod types;
use hyper::client::Client;
use hyper::client::response::Response;
use hyper::error::Error;
use hyper::header::ContentType;
use hyper::method::Method;
use mime::Mime;
use std::str::FromStr;
header! {
(XApiId, "x-api-id") => [String]
}
header! {
(XApiKey, "x-api-key") => [String]
}
lazy_static! {
static ref API_ENDPOINT: String = "https://api.status.io/v2/".to_owned();
}
#[derive(Debug)]
pub struct StatusIoClient {
api_id: String,
api_key: String,
client: Client,
base_url: String,
}
impl StatusIoClient {
pub fn new(api_id: String, api_key: String, base_url: Option<String>) -> StatusIoClient {
let url: String;
if base_url.is_none() {
url = API_ENDPOINT.clone();
} else {
url = base_url.unwrap();
}
StatusIoClient {
api_id: api_id,
api_key: api_key,
client: Client::new(),
base_url: url,
}
}
fn method_can_have_body(&self, method: &Method) -> bool {
match method {
&Method::Connect | &Method::Get | &Method::Options | &Method::Trace => false,
_ => true
}
}
pub fn make_request(&self, path: String, method: Method, body: Option<String>) -> Result<Response, Error> {
let can_have_body = self.method_can_have_body(&method);
let has_body = body.is_some();
let body_result = body.unwrap_or("".to_string());
let mut request = self.client.request(method, &format!("{}{}", self.base_url, path));
if has_body && can_have_body {
request = request.body(&body_result);
}
request.header(XApiId(self.api_id.clone()))
.header(XApiKey(self.api_key.clone()))
.header(ContentType(Mime::from_str(&"application/json".to_string()).unwrap()))
.send()
}
}