use crate::github::{error::GitHubError, util::spawn_task};
use crate::runtime::AsyncTask;
use octocrab::{Octocrab, models::pulls::PullRequest};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct CreatePullRequestRequest {
pub owner: String,
pub repo: String,
pub title: String,
pub body: Option<String>,
pub head: String,
pub base: String,
pub draft: Option<bool>,
pub maintainer_can_modify: Option<bool>,
}
pub(crate) fn create_pull_request(
inner: Arc<Octocrab>,
request: CreatePullRequestRequest,
) -> AsyncTask<Result<PullRequest, GitHubError>> {
spawn_task(async move {
let handler = inner.pulls(&request.owner, &request.repo);
let mut req = handler.create(&request.head, &request.base, &request.title);
req = req.body(request.body.unwrap_or_default());
if let Some(d) = request.draft {
req = req.draft(d);
}
if let Some(mcm) = request.maintainer_can_modify {
req = req.maintainer_can_modify(mcm);
}
req.send().await.map_err(GitHubError::from)
})
}