use serde::{Deserialize, Serialize};
use crate::model::ForgeAccount;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum PullRequestState {
Open,
Closed,
Merged,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct Reopen {
pub by: ForgeAccount,
pub at: i64,
}
impl Reopen {
pub fn new(by: ForgeAccount, at: i64) -> Self {
Reopen { by, at }
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct PullRequest {
pub state: PullRequestState,
pub last_reopen_by_other: Option<Reopen>,
}
impl PullRequest {
pub fn new(state: PullRequestState) -> Self {
PullRequest {
state,
last_reopen_by_other: None,
}
}
pub fn with_reopen(mut self, reopen: Reopen) -> Self {
self.last_reopen_by_other = Some(reopen);
self
}
pub fn is_open(&self) -> bool {
self.state == PullRequestState::Open
}
}