@@ -147,6 +147,7 @@ pub struct ApprovalInfo {
147
147
#[ derive( Debug , Clone , PartialEq ) ]
148
148
pub enum ApprovalStatus {
149
149
NotApproved ,
150
+ ApprovalPending ( ApprovalInfo ) ,
150
151
Approved ( ApprovalInfo ) ,
151
152
}
152
153
@@ -158,23 +159,33 @@ impl sqlx::Type<sqlx::Postgres> for ApprovalStatus {
158
159
159
160
impl < ' r > sqlx:: Decode < ' r , sqlx:: Postgres > for ApprovalStatus {
160
161
fn decode ( value : sqlx:: postgres:: PgValueRef < ' r > ) -> Result < Self , BoxDynError > {
161
- let ( approver, sha, approved_at) =
162
- <( Option < String > , Option < String > , Option < DateTime < Utc > > ) as sqlx:: Decode <
163
- sqlx:: Postgres ,
164
- > >:: decode ( value) ?;
165
-
166
- match ( approver, sha, approved_at) {
167
- ( Some ( approver) , Some ( sha) , Some ( approved_at) ) => {
162
+ let ( approver, sha, approved_at, is_pending) =
163
+ <(
164
+ Option < String > ,
165
+ Option < String > ,
166
+ Option < DateTime < Utc > > ,
167
+ Option < bool > ,
168
+ ) as sqlx:: Decode < sqlx:: Postgres > >:: decode ( value) ?;
169
+
170
+ match ( approver, sha, approved_at, is_pending) {
171
+ ( Some ( approver) , Some ( sha) , Some ( approved_at) , Some ( true ) ) => {
172
+ Ok ( ApprovalStatus :: ApprovalPending ( ApprovalInfo {
173
+ approver,
174
+ sha,
175
+ approved_at,
176
+ } ) )
177
+ }
178
+ ( Some ( approver) , Some ( sha) , Some ( approved_at) , Some ( false ) | None ) => {
168
179
Ok ( ApprovalStatus :: Approved ( ApprovalInfo {
169
180
approver,
170
181
sha,
171
182
approved_at,
172
183
} ) )
173
184
}
174
- ( None , None , None ) => Ok ( ApprovalStatus :: NotApproved ) ,
175
- ( approver, sha, approved_at) => Err ( format ! (
176
- "Inconsistent approval state: approver={:?}, sha={:?}, approved_at={:?}" ,
177
- approver, sha, approved_at
185
+ ( None , None , None , _ ) => Ok ( ApprovalStatus :: NotApproved ) ,
186
+ ( approver, sha, approved_at, is_pending ) => Err ( format ! (
187
+ "Inconsistent approval state: approver={:?}, sha={:?}, approved_at={:?}, is_pending={:?} " ,
188
+ approver, sha, approved_at, is_pending
178
189
)
179
190
. into ( ) ) ,
180
191
}
@@ -258,16 +269,24 @@ impl PullRequestModel {
258
269
matches ! ( self . approval_status, ApprovalStatus :: Approved ( _) )
259
270
}
260
271
272
+ pub fn is_pending_approval ( & self ) -> bool {
273
+ matches ! ( self . approval_status, ApprovalStatus :: ApprovalPending ( _) )
274
+ }
275
+
261
276
pub fn approver ( & self ) -> Option < & str > {
262
277
match & self . approval_status {
263
- ApprovalStatus :: Approved ( info) => Some ( info. approver . as_str ( ) ) ,
278
+ ApprovalStatus :: Approved ( info) | ApprovalStatus :: ApprovalPending ( info) => {
279
+ Some ( info. approver . as_str ( ) )
280
+ }
264
281
ApprovalStatus :: NotApproved => None ,
265
282
}
266
283
}
267
284
268
285
pub fn approved_sha ( & self ) -> Option < & str > {
269
286
match & self . approval_status {
270
- ApprovalStatus :: Approved ( info) => Some ( info. sha . as_str ( ) ) ,
287
+ ApprovalStatus :: Approved ( info) | ApprovalStatus :: ApprovalPending ( info) => {
288
+ Some ( info. sha . as_str ( ) )
289
+ }
271
290
ApprovalStatus :: NotApproved => None ,
272
291
}
273
292
}
0 commit comments