use crate::models::pr_stacks::{AsyncMergeAction, AsyncMergeMethod, AsyncMergeResult};
use super::PullRequestHandler;
#[derive(serde::Serialize)]
pub struct MergeAsyncBuilder<'octo, 'b> {
#[serde(skip)]
handler: &'b PullRequestHandler<'octo>,
#[serde(skip)]
pr_number: u64,
#[serde(skip_serializing_if = "Option::is_none")]
commit_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
commit_message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
sha: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
merge_method: Option<AsyncMergeMethod>,
#[serde(skip_serializing_if = "Option::is_none")]
merge_action: Option<AsyncMergeAction>,
#[serde(skip_serializing_if = "Option::is_none")]
bypass_rules: Option<bool>,
}
impl<'octo, 'b> MergeAsyncBuilder<'octo, 'b> {
pub(crate) fn new(handler: &'b PullRequestHandler<'octo>, pr_number: u64) -> Self {
Self {
handler,
pr_number,
commit_title: None,
commit_message: None,
sha: None,
merge_method: None,
merge_action: None,
bypass_rules: None,
}
}
pub fn commit_title(mut self, title: impl Into<String>) -> Self {
self.commit_title = Some(title.into());
self
}
pub fn commit_message(mut self, msg: impl Into<String>) -> Self {
self.commit_message = Some(msg.into());
self
}
pub fn sha(mut self, sha: impl Into<String>) -> Self {
self.sha = Some(sha.into());
self
}
pub fn merge_method(mut self, method: AsyncMergeMethod) -> Self {
self.merge_method = Some(method);
self
}
pub fn merge_action(mut self, action: AsyncMergeAction) -> Self {
self.merge_action = Some(action);
self
}
pub fn bypass_rules(mut self, bypass: bool) -> Self {
self.bypass_rules = Some(bypass);
self
}
pub async fn send(self) -> crate::Result<AsyncMergeResult> {
let route = format!(
"/repos/{owner}/{repo}/pulls/{pr}/merge-async",
owner = self.handler.owner,
repo = self.handler.repo,
pr = self.pr_number,
);
self.handler.http_put(route, Some(&self)).await
}
}