use std::collections::BTreeMap;
use serde_json::Value;
use common::{Repository, User};
use client::Client;
use error;
use utils;
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct Event {
#[serde(rename = "type")]
pub event_type: String,
pub public: bool,
pub payload: BTreeMap<String, Value>,
pub repo: Repository,
pub actor: User,
pub org: Option<Organization>,
pub created_at: String,
pub id: u64
}
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct Organization {
pub id: u64,
pub login: String,
pub gravatar_id: String,
pub avatar_url: String,
pub url: String,
}
pub trait EventsExt {
fn get_events(&mut self) -> Result<Vec<Event>, error::Error>;
fn get_repo_events(&mut self, owner: String, repo: String) -> Result<Vec<Event>, error::Error>;
fn get_networks_owner_repo_events(&mut self, owner: String, repo: String) -> Result<Vec<Event>, error::Error>;
fn get_orgs_org_events(&mut self, org: String) -> Result<Vec<Event>, error::Error>;
fn get_users_username_received_events(&mut self, username: String) -> Result<Vec<Event>, error::Error>;
fn get_users_username_received_events_public(&mut self, username: String) -> Result<Vec<Event>, error::Error>;
fn get_users_username_events(&mut self, username: String) -> Result<Vec<Event>, error::Error>;
fn get_users_username_events_public(&mut self, username: String) -> Result<Vec<Event>, error::Error>;
fn get_users_username_events_orgs_org(&mut self, username: String, org: String) -> Result<Vec<Event>, error::Error>;
}
impl EventsExt for Client {
fn get_events(&mut self) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, "/events".into())
}
fn get_repo_events(&mut self, owner: String, repo: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/repos/{}/{}/events", owner, repo))
}
fn get_networks_owner_repo_events(&mut self, owner: String, repo: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/networks/{}/{}/events", owner, repo))
}
fn get_orgs_org_events(&mut self, org: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/orgs/{}/events", org))
}
fn get_users_username_received_events(&mut self, username: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/users/{}/received_events", username))
}
fn get_users_username_received_events_public(&mut self, username: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/users/{}/received_events/public", username))
}
fn get_users_username_events(&mut self, username: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/users/{}/events", username))
}
fn get_users_username_events_public(&mut self, username: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/users/{}/events/public", username))
}
fn get_users_username_events_orgs_org(&mut self, username: String, org: String) -> Result<Vec<Event>, error::Error> {
utils::request_endpoint(self, format!("/users/{}/events/orgs/{}", username, org))
}
}