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 pub mergeable: Option<bool>,
34
35 pub mergeable_state: Option<String>,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41#[serde(rename_all = "lowercase")]
42pub enum PullRequestState {
43 Open,
45 Closed,
47 Merged,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct CheckRun {
54 pub name: String,
56
57 pub status: CheckStatus,
59
60 pub details_url: Option<String>,
62}
63
64#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
66#[serde(rename_all = "lowercase")]
67pub enum CheckStatus {
68 Queued,
70 InProgress,
72 Success,
74 Failure,
76 Skipped,
78 Cancelled,
80}
81
82impl CheckStatus {
83 #[must_use]
85 pub const fn is_success(&self) -> bool {
86 matches!(self, Self::Success | Self::Skipped)
87 }
88
89 #[must_use]
91 pub const fn is_failure(&self) -> bool {
92 matches!(self, Self::Failure)
93 }
94
95 #[must_use]
97 pub const fn is_pending(&self) -> bool {
98 matches!(self, Self::Queued | Self::InProgress)
99 }
100}
101
102#[derive(Debug, Serialize)]
104pub struct CreatePullRequest {
105 pub title: String,
107
108 pub body: String,
110
111 pub head: String,
113
114 pub base: String,
116
117 pub draft: bool,
119}
120
121#[derive(Debug, Serialize)]
123pub struct UpdatePullRequest {
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub title: Option<String>,
127
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub body: Option<String>,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub base: Option<String>,
135}
136
137#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
139#[serde(rename_all = "lowercase")]
140pub enum MergeMethod {
141 Merge,
143 #[default]
145 Squash,
146 Rebase,
148}
149
150#[derive(Debug, Serialize)]
152pub struct MergePullRequest {
153 #[serde(skip_serializing_if = "Option::is_none")]
155 pub commit_title: Option<String>,
156
157 #[serde(skip_serializing_if = "Option::is_none")]
159 pub commit_message: Option<String>,
160
161 pub merge_method: MergeMethod,
163}
164
165#[derive(Debug, Clone, Deserialize)]
167pub struct MergeResult {
168 pub sha: String,
170
171 pub merged: bool,
173
174 pub message: String,
176}
177
178#[derive(Debug, Clone, Deserialize)]
180pub struct IssueComment {
181 pub id: u64,
183
184 pub body: Option<String>,
186}
187
188#[derive(Debug, Serialize)]
190pub struct CreateComment {
191 pub body: String,
193}
194
195#[derive(Debug, Serialize)]
197pub struct UpdateComment {
198 pub body: String,
200}