Skip to content

Commit

Permalink
add model for issue timeline events
Browse files Browse the repository at this point in the history
  • Loading branch information
0xB10C committed Jun 1, 2023
1 parent be452a1 commit 250d9ef
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ pub mod pulls;
pub mod reactions;
pub mod repos;
pub mod teams;
pub mod timelines;
pub mod workflows;

pub use apps::App;
Expand Down Expand Up @@ -119,6 +120,7 @@ id_type!(
RunId,
StatusId,
TeamId,
TimelineEventId,
ThreadId,
UploaderId,
UserId,
Expand Down
130 changes: 130 additions & 0 deletions src/models/timelines.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
use super::*;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TimelineEvent {
/// Identifies the actual type of event that occurred.
pub event: Event,
/// The unique identifier of the event.
pub id: Option<TimelineEventId>,
/// The Global Node ID of the event.
pub node_id: Option<String>,
/// The REST API URL for fetching the event.
pub url: Option<Url>,
/// The person who generated the event.
pub actor: Option<Author>,
/// The SHA of the commit that referenced this issue.
pub commit_id: Option<String>,
/// The GitHub REST API link to the commit that referenced this issue.
pub commit_url: Option<String>,
/// The timestamp indicating when the event occurred.
pub created_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub project_card: Option<ProjectCard>,
#[serde(skip_serializing_if = "Option::is_none")]
pub project_id: Option<ProjectId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub project_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub column_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assignees: Option<Vec<Author>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assigner: Option<Author>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_association: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub body: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<Author>,
#[serde(skip_serializing_if = "Option::is_none")]
pub html_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issue_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tree: Option<repos::CommitObject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification: Option<repos::Verification>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parents: Option<Vec<repos::Commit>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub committer: Option<CommitAuthor>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author: Option<CommitAuthor>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sha: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<Source>,
#[serde(skip_serializing_if = "Option::is_none")]
pub milestone: Option<Milestone>, // differs from other milestones the API returns. Has only a title.
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<Label>, // differs from other labels the API returns. Has only a name and a color.
#[serde(skip_serializing_if = "Option::is_none")]
pub lock_reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub previous_column_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rename: Option<Rename>,
#[serde(skip_serializing_if = "Option::is_none")]
pub submitted_at: Option<chrono::DateTime<chrono::Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<pulls::ReviewState>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dismissed_review: Option<DismissedReview>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pull_request_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub requested_reviewers: Option<Vec<Author>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub review_requester: Option<Author>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assignee: Option<Author>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct DismissedReview {
state: pulls::ReviewState,
review_id: ReviewId,
dismissal_message: String,
dismissal_commit_id: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Source {
issue: issues::Issue,
r#type: String,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Rename {
from: String,
to: String,
}

#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Label {
pub name: String,
pub color: String,
}

#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Milestone {
pub title: String,
}

/// The author of a commit, identified by its name and email.
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CommitAuthor {
pub name: String,
pub email: String,
pub date: Option<chrono::DateTime<chrono::Utc>>,
}

0 comments on commit 250d9ef

Please sign in to comment.