use error::*;
use response::Response;
use rustc_serialize::Decoder;
use rustc_serialize::Decodable;
use std::fmt;
#[derive(Debug, RustcDecodable)]
pub struct Repository {
pub id: u64,
pub name: String,
pub url: String,
}
#[derive(Debug, RustcDecodable)]
pub struct Actor {
pub id: u64,
pub login: String,
pub gravatar_id: String,
pub avatar_url: String,
pub url: String,
pub html_url: Option<String>,
pub followers_url: Option<String>,
pub following_url: Option<String>,
pub gists_url: Option<String>,
pub starred_url: Option<String>,
pub subscriptions_url: Option<String>,
pub organizations_url: Option<String>,
pub repos_url: Option<String>,
pub events_url: Option<String>,
pub received_events_url: Option<String>,
pub site_admin: Option<bool>,
}
#[derive(Debug, RustcDecodable)]
pub struct Organisation {
pub id: u64,
pub login: String,
pub gravatar_id: String,
pub avatar_url: String,
pub url: String,
}
#[derive(Debug, RustcDecodable)]
pub struct EventResponse {
pub public: bool,
pub repo: Repository,
pub actor: Actor,
pub org: Option<Organisation>,
pub created_at: String,
pub id: String,
}
#[derive(Debug)]
pub enum IssueEventType {
Closed,
Reopened,
Subscribed,
Merged,
Referenced,
Mentioned,
Assigned,
Unassigned,
Labeled,
Unlabeled,
Milestoned,
Demilestoned,
Renamed,
Locked,
Unlocked,
HeadRefDeleted,
HeadRefRestored,
Unknown(String),
}
impl fmt::Display for IssueEventType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let msg: &str = match *self {
IssueEventType::Closed => "closed",
IssueEventType::Reopened => "reopened",
IssueEventType::Subscribed => "subscribed",
IssueEventType::Merged => "merged",
IssueEventType::Referenced => "referenced",
IssueEventType::Mentioned => "mentioned",
IssueEventType::Assigned => "assigned",
IssueEventType::Unassigned => "unassigned",
IssueEventType::Labeled => "labeled",
IssueEventType::Unlabeled => "unlabeled",
IssueEventType::Milestoned => "milestoned",
IssueEventType::Demilestoned => "demilestoned",
IssueEventType::Renamed => "renamed",
IssueEventType::Locked => "locked",
IssueEventType::Unlocked => "unlocked",
IssueEventType::HeadRefDeleted => "head reference deleted",
IssueEventType::HeadRefRestored => "head reference restored",
IssueEventType::Unknown(ref s) => &s,
};
write!(f, "{}", msg)
}
}
impl Decodable for IssueEventType {
fn decode<D: Decoder>(d: &mut D) -> Result<IssueEventType, D::Error> {
match d.read_str() {
Ok(code) => Ok(match &*code {
"closed" => IssueEventType::Closed,
"reopened" => IssueEventType::Reopened,
"subscribed" => IssueEventType::Subscribed,
"merged" => IssueEventType::Merged,
"referenced" => IssueEventType::Referenced,
"mentioned" => IssueEventType::Mentioned,
"assigned" => IssueEventType::Assigned,
"unassigned" => IssueEventType::Unassigned,
"labeled" => IssueEventType::Labeled,
"unlabeled" => IssueEventType::Unlabeled,
"milestoned" => IssueEventType::Milestoned,
"demilestoned" => IssueEventType::Demilestoned,
"renamed" => IssueEventType::Renamed,
"locked" => IssueEventType::Locked,
"unlocked" => IssueEventType::Unlocked,
"head_ref_deleted" => IssueEventType::HeadRefDeleted,
"head_ref_restored" => IssueEventType::HeadRefRestored,
unknown => IssueEventType::Unknown(unknown.to_string()),
}),
Err(err) => Err(err),
}
}
}
#[derive(Debug, RustcDecodable)]
pub struct IssueEventResponse {
pub public: bool,
pub repo: Repository,
pub actor: Actor,
pub org: Option<Organisation>,
pub event: IssueEventType,
pub created_at: String,
pub commit_id: String,
pub id: String,
}
pub type EventReturnType = Result<(Vec<EventResponse>, Response), ClientError>;
pub type IssueEventReturnType = Result<(Vec<IssueEventResponse>, Response), ClientError>;
pub mod events;