1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct PullRequest {
8 pub number: u64,
10
11 pub title: String,
13
14 pub body: Option<String>,
16
17 pub state: PullRequestState,
19
20 pub draft: bool,
22
23 pub head_branch: String,
25
26 pub base_branch: String,
28
29 pub html_url: String,
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
35#[serde(rename_all = "lowercase")]
36pub enum PullRequestState {
37 Open,
39 Closed,
41 Merged,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct CheckRun {
48 pub name: String,
50
51 pub status: CheckStatus,
53
54 pub details_url: Option<String>,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
60#[serde(rename_all = "lowercase")]
61pub enum CheckStatus {
62 Queued,
64 InProgress,
66 Success,
68 Failure,
70 Skipped,
72 Cancelled,
74}
75
76impl CheckStatus {
77 #[must_use]
79 pub const fn is_success(&self) -> bool {
80 matches!(self, Self::Success | Self::Skipped)
81 }
82
83 #[must_use]
85 pub const fn is_failure(&self) -> bool {
86 matches!(self, Self::Failure)
87 }
88
89 #[must_use]
91 pub const fn is_pending(&self) -> bool {
92 matches!(self, Self::Queued | Self::InProgress)
93 }
94}
95
96#[derive(Debug, Serialize)]
98pub struct CreatePullRequest {
99 pub title: String,
101
102 pub body: String,
104
105 pub head: String,
107
108 pub base: String,
110
111 pub draft: bool,
113}
114
115#[derive(Debug, Serialize)]
117pub struct UpdatePullRequest {
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub title: Option<String>,
121
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub body: Option<String>,
125
126 #[serde(skip_serializing_if = "Option::is_none")]
128 pub base: Option<String>,
129}
130
131#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
133#[serde(rename_all = "lowercase")]
134pub enum MergeMethod {
135 Merge,
137 #[default]
139 Squash,
140 Rebase,
142}
143
144#[derive(Debug, Serialize)]
146pub struct MergePullRequest {
147 #[serde(skip_serializing_if = "Option::is_none")]
149 pub commit_title: Option<String>,
150
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub commit_message: Option<String>,
154
155 pub merge_method: MergeMethod,
157}
158
159#[derive(Debug, Clone, Deserialize)]
161pub struct MergeResult {
162 pub sha: String,
164
165 pub merged: bool,
167
168 pub message: String,
170}
171
172#[derive(Debug, Clone, Deserialize)]
174pub struct IssueComment {
175 pub id: u64,
177
178 pub body: Option<String>,
180}
181
182#[derive(Debug, Serialize)]
184pub struct CreateComment {
185 pub body: String,
187}
188
189#[derive(Debug, Serialize)]
191pub struct UpdateComment {
192 pub body: String,
194}