1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct PullRequest {
16 #[serde(rename = "_links")]
17 pub _links: Box<models::WebhooksPullRequest5Links>,
18 #[serde(rename = "active_lock_reason", deserialize_with = "Option::deserialize")]
19 pub active_lock_reason: Option<ActiveLockReason>,
20 #[serde(rename = "additions", skip_serializing_if = "Option::is_none")]
21 pub additions: Option<i32>,
22 #[serde(rename = "assignee", deserialize_with = "Option::deserialize")]
23 pub assignee: Option<Box<models::User1>>,
24 #[serde(rename = "assignees")]
25 pub assignees: Vec<models::User1>,
26 #[serde(rename = "author_association")]
28 pub author_association: AuthorAssociation,
29 #[serde(rename = "auto_merge", deserialize_with = "Option::deserialize")]
30 pub auto_merge: Option<Box<models::PullRequestAutoMerge>>,
31 #[serde(rename = "base")]
32 pub base: Box<models::PullRequestBase>,
33 #[serde(rename = "body", deserialize_with = "Option::deserialize")]
34 pub body: Option<String>,
35 #[serde(rename = "changed_files", skip_serializing_if = "Option::is_none")]
36 pub changed_files: Option<i32>,
37 #[serde(rename = "closed_at", deserialize_with = "Option::deserialize")]
38 pub closed_at: Option<String>,
39 #[serde(rename = "comments", skip_serializing_if = "Option::is_none")]
40 pub comments: Option<i32>,
41 #[serde(rename = "comments_url")]
42 pub comments_url: String,
43 #[serde(rename = "commits", skip_serializing_if = "Option::is_none")]
44 pub commits: Option<i32>,
45 #[serde(rename = "commits_url")]
46 pub commits_url: String,
47 #[serde(rename = "created_at")]
48 pub created_at: String,
49 #[serde(rename = "deletions", skip_serializing_if = "Option::is_none")]
50 pub deletions: Option<i32>,
51 #[serde(rename = "diff_url")]
52 pub diff_url: String,
53 #[serde(rename = "draft")]
55 pub draft: bool,
56 #[serde(rename = "head")]
57 pub head: Box<models::PullRequestHead>,
58 #[serde(rename = "html_url")]
59 pub html_url: String,
60 #[serde(rename = "id")]
61 pub id: i32,
62 #[serde(rename = "issue_url")]
63 pub issue_url: String,
64 #[serde(rename = "labels")]
65 pub labels: Vec<models::Label>,
66 #[serde(rename = "locked")]
67 pub locked: bool,
68 #[serde(rename = "maintainer_can_modify", skip_serializing_if = "Option::is_none")]
70 pub maintainer_can_modify: Option<bool>,
71 #[serde(rename = "merge_commit_sha", deserialize_with = "Option::deserialize")]
72 pub merge_commit_sha: Option<String>,
73 #[serde(rename = "mergeable", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
74 pub mergeable: Option<Option<bool>>,
75 #[serde(rename = "mergeable_state", skip_serializing_if = "Option::is_none")]
76 pub mergeable_state: Option<String>,
77 #[serde(rename = "merged", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
78 pub merged: Option<Option<bool>>,
79 #[serde(rename = "merged_at", deserialize_with = "Option::deserialize")]
80 pub merged_at: Option<String>,
81 #[serde(rename = "merged_by", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
82 pub merged_by: Option<Option<Box<models::User>>>,
83 #[serde(rename = "milestone", deserialize_with = "Option::deserialize")]
84 pub milestone: Option<Box<models::Milestone>>,
85 #[serde(rename = "node_id")]
86 pub node_id: String,
87 #[serde(rename = "number")]
89 pub number: i32,
90 #[serde(rename = "patch_url")]
91 pub patch_url: String,
92 #[serde(rename = "rebaseable", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
93 pub rebaseable: Option<Option<bool>>,
94 #[serde(rename = "requested_reviewers")]
95 pub requested_reviewers: Vec<models::PullRequestRequestedReviewersInner>,
96 #[serde(rename = "requested_teams")]
97 pub requested_teams: Vec<models::Team>,
98 #[serde(rename = "review_comment_url")]
99 pub review_comment_url: String,
100 #[serde(rename = "review_comments", skip_serializing_if = "Option::is_none")]
101 pub review_comments: Option<i32>,
102 #[serde(rename = "review_comments_url")]
103 pub review_comments_url: String,
104 #[serde(rename = "state")]
106 pub state: State,
107 #[serde(rename = "statuses_url")]
108 pub statuses_url: String,
109 #[serde(rename = "title")]
111 pub title: String,
112 #[serde(rename = "updated_at")]
113 pub updated_at: String,
114 #[serde(rename = "url")]
115 pub url: String,
116 #[serde(rename = "user", deserialize_with = "Option::deserialize")]
117 pub user: Option<Box<models::User1>>,
118}
119
120impl PullRequest {
121 pub fn new(_links: models::WebhooksPullRequest5Links, active_lock_reason: Option<ActiveLockReason>, assignee: Option<models::User1>, assignees: Vec<models::User1>, author_association: AuthorAssociation, auto_merge: Option<models::PullRequestAutoMerge>, base: models::PullRequestBase, body: Option<String>, closed_at: Option<String>, comments_url: String, commits_url: String, created_at: String, diff_url: String, draft: bool, head: models::PullRequestHead, html_url: String, id: i32, issue_url: String, labels: Vec<models::Label>, locked: bool, merge_commit_sha: Option<String>, merged_at: Option<String>, milestone: Option<models::Milestone>, node_id: String, number: i32, patch_url: String, requested_reviewers: Vec<models::PullRequestRequestedReviewersInner>, requested_teams: Vec<models::Team>, review_comment_url: String, review_comments_url: String, state: State, statuses_url: String, title: String, updated_at: String, url: String, user: Option<models::User1>) -> PullRequest {
122 PullRequest {
123 _links: Box::new(_links),
124 active_lock_reason,
125 additions: None,
126 assignee: assignee.map(Box::new),
127 assignees,
128 author_association,
129 auto_merge: auto_merge.map(Box::new),
130 base: Box::new(base),
131 body,
132 changed_files: None,
133 closed_at,
134 comments: None,
135 comments_url,
136 commits: None,
137 commits_url,
138 created_at,
139 deletions: None,
140 diff_url,
141 draft,
142 head: Box::new(head),
143 html_url,
144 id,
145 issue_url,
146 labels,
147 locked,
148 maintainer_can_modify: None,
149 merge_commit_sha,
150 mergeable: None,
151 mergeable_state: None,
152 merged: None,
153 merged_at,
154 merged_by: None,
155 milestone: milestone.map(Box::new),
156 node_id,
157 number,
158 patch_url,
159 rebaseable: None,
160 requested_reviewers,
161 requested_teams,
162 review_comment_url,
163 review_comments: None,
164 review_comments_url,
165 state,
166 statuses_url,
167 title,
168 updated_at,
169 url,
170 user: user.map(Box::new),
171 }
172 }
173}
174#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
176pub enum ActiveLockReason {
177 #[serde(rename = "resolved")]
178 Resolved,
179 #[serde(rename = "off-topic")]
180 OffTopic,
181 #[serde(rename = "too heated")]
182 TooHeated,
183 #[serde(rename = "spam")]
184 Spam,
185}
186
187impl Default for ActiveLockReason {
188 fn default() -> ActiveLockReason {
189 Self::Resolved
190 }
191}
192#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
194pub enum AuthorAssociation {
195 #[serde(rename = "COLLABORATOR")]
196 Collaborator,
197 #[serde(rename = "CONTRIBUTOR")]
198 Contributor,
199 #[serde(rename = "FIRST_TIMER")]
200 FirstTimer,
201 #[serde(rename = "FIRST_TIME_CONTRIBUTOR")]
202 FirstTimeContributor,
203 #[serde(rename = "MANNEQUIN")]
204 Mannequin,
205 #[serde(rename = "MEMBER")]
206 Member,
207 #[serde(rename = "NONE")]
208 None,
209 #[serde(rename = "OWNER")]
210 Owner,
211}
212
213impl Default for AuthorAssociation {
214 fn default() -> AuthorAssociation {
215 Self::Collaborator
216 }
217}
218#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
220pub enum State {
221 #[serde(rename = "open")]
222 Open,
223 #[serde(rename = "closed")]
224 Closed,
225}
226
227impl Default for State {
228 fn default() -> State {
229 Self::Open
230 }
231}
232