extern crate reqwest;
use hyper::header::Authorization;
use hyper::StatusCode;
use super::data::SubmitData;
use super::error::{AnalyticordError, Result};
use super::events::Event;
#[derive(Debug)]
pub struct Client {
url: String,
token: String,
client: reqwest::Client,
}
impl Client {
pub fn default(token: String) -> Result<Client> {
Client::with_url("https://analyticord.solutions".into(), token)
}
pub fn with_url(url: String, token: String) -> Result<Client> {
let the_client = Client {
url: url,
token: token,
client: reqwest::Client::new().unwrap(),
};
let mut res = the_client
.client
.get(format!("{}{}", the_client.url, "/api/botLogin").as_str())
.unwrap()
.header(Authorization(format!("bot {}", the_client.token)))
.send()
.unwrap();
match res.status() {
StatusCode::Ok => Ok(the_client),
StatusCode::ImATeapot => Err(res.json().unwrap()),
_ => Err(AnalyticordError::Unknown),
}
}
pub fn send_event<T: Event>(self, event: T) -> Result<SubmitData> {
let event_data = event.get_event_data();
let mut res = self.client
.post(format!("{}{}", self.url, "/api/submit").as_str())
.unwrap()
.header(Authorization(format!("bot {}", self.token)))
.form(&[("eventType", event_data.0), ("data", event_data.1)])
.unwrap()
.send()
.unwrap();
match res.status() {
StatusCode::ImATeapot => Err(res.json().unwrap()),
StatusCode::Ok => Ok(res.json().unwrap()),
_ => Err(AnalyticordError::Unknown),
}
}
}