use serde::{Deserialize, Serialize};
use std::fmt;
use crate::client::{Issue, PullRequest, Repository};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PullRequestEvent {
pub action: PullRequestAction,
pub number: u32,
pub pull_request: PullRequest,
pub repository: Repository,
pub sender: EventUser,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PullRequestAction {
Opened,
Closed,
Reopened,
Synchronize,
Edited,
Assigned,
Unassigned,
ReviewRequested,
ReviewRequestRemoved,
Labeled,
Unlabeled,
ReadyForReview,
ConvertedToDraft,
}
impl fmt::Display for PullRequestAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
Self::Opened => "opened",
Self::Closed => "closed",
Self::Reopened => "reopened",
Self::Synchronize => "synchronize",
Self::Edited => "edited",
Self::Assigned => "assigned",
Self::Unassigned => "unassigned",
Self::ReviewRequested => "review_requested",
Self::ReviewRequestRemoved => "review_request_removed",
Self::Labeled => "labeled",
Self::Unlabeled => "unlabeled",
Self::ReadyForReview => "ready_for_review",
Self::ConvertedToDraft => "converted_to_draft",
};
write!(f, "{}", s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IssueEvent {
pub action: IssueAction,
pub issue: Issue,
pub repository: Repository,
pub sender: EventUser,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IssueAction {
Opened,
Closed,
Reopened,
Edited,
Assigned,
Unassigned,
Labeled,
Unlabeled,
Transferred,
Pinned,
Unpinned,
}
impl fmt::Display for IssueAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
Self::Opened => "opened",
Self::Closed => "closed",
Self::Reopened => "reopened",
Self::Edited => "edited",
Self::Assigned => "assigned",
Self::Unassigned => "unassigned",
Self::Labeled => "labeled",
Self::Unlabeled => "unlabeled",
Self::Transferred => "transferred",
Self::Pinned => "pinned",
Self::Unpinned => "unpinned",
};
write!(f, "{}", s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PushEvent {
#[serde(rename = "ref")]
pub ref_name: String,
pub before: String,
pub after: String,
pub created: bool,
pub deleted: bool,
pub forced: bool,
pub commits: Vec<Commit>,
pub head_commit: Option<Commit>,
pub repository: Repository,
pub sender: EventUser,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Commit {
pub id: String,
pub message: String,
pub timestamp: String,
pub author: CommitAuthor,
pub committer: CommitAuthor,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommitAuthor {
pub name: String,
pub email: String,
pub username: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckRunEvent {
pub action: CheckRunAction,
pub check_run: CheckRun,
pub repository: Repository,
pub sender: EventUser,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunAction {
Created,
Completed,
Rerequested,
RequestedAction,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckRun {
pub id: u64,
pub name: String,
pub status: String,
pub conclusion: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckSuiteEvent {
pub action: CheckSuiteAction,
pub check_suite: CheckSuite,
pub repository: Repository,
pub sender: EventUser,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckSuiteAction {
Completed,
Requested,
Rerequested,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckSuite {
pub id: u64,
pub status: String,
pub conclusion: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventUser {
pub id: u64,
pub login: String,
#[serde(rename = "type")]
pub user_type: String,
}
#[cfg(test)]
#[path = "github_events_tests.rs"]
mod tests;