#![allow(clippy::all)]
#![allow(missing_docs)]
#![allow(unused_imports)]
#![allow(unused_mut)]
use reqwest::Method;
use serde::Serialize;
use crate::error::{ApiError, Result};
use crate::http::HttpInner;
use crate::models;
#[derive(Debug, Clone)]
pub struct PullsClient {
inner: HttpInner,
}
impl PullsClient {
pub fn new(inner: HttpInner) -> Self {
Self { inner }
}
pub async fn can_user_be_assigned_to_pull(
&self,
repo: String,
number: String,
assignee: String,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/pulls/{}/assignees/{}", repo, number, assignee);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::GET, url)
.await
}
pub async fn delete_pull_assignees(
&self,
repo: String,
number: String,
body: &crate::models::DeletePullAssigneesForm,
) -> Result<crate::models::Pull> {
let path = format!("/{}/-/pulls/{}/assignees", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Pull, _>(Method::DELETE, url, body)
.await
}
pub async fn delete_pull_label(
&self,
repo: String,
number: String,
name: String,
) -> Result<crate::models::Label> {
let path = format!("/{}/-/pulls/{}/labels/{}", repo, number, name);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::Label>(Method::DELETE, url)
.await
}
pub async fn delete_pull_labels(
&self,
repo: String,
number: String,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/pulls/{}/labels", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn delete_repo_files(
&self,
repo: String,
file_path: String,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/files/{}", repo, file_path);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn delete_repo_imgs(
&self,
repo: String,
img_path: String,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/imgs/{}", repo, img_path);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn get_pr_files(&self, repo: String, file_path: String) -> Result<serde_json::Value> {
let path = format!("/{}/-/files/pulls/{}", repo, file_path);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::GET, url)
.await
}
pub async fn get_pr_imgs(&self, repo: String, img_path: String) -> Result<serde_json::Value> {
let path = format!("/{}/-/imgs/pulls/{}", repo, img_path);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::GET, url)
.await
}
pub async fn get_pull(&self, repo: String, number: String) -> Result<crate::models::Pull> {
let path = format!("/{}/-/pulls/{}", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::Pull>(Method::GET, url)
.await
}
pub async fn get_pull_comment(
&self,
repo: String,
number: String,
comment_id: i64,
) -> Result<crate::models::PullRequestComment> {
let path = format!("/{}/-/pulls/{}/comments/{}", repo, number, comment_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::PullRequestComment>(Method::GET, url)
.await
}
pub async fn list_pull_assignees(
&self,
repo: String,
number: String,
) -> Result<Vec<crate::models::UserInfo>> {
let path = format!("/{}/-/pulls/{}/assignees", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<Vec<crate::models::UserInfo>>(Method::GET, url)
.await
}
pub async fn list_pull_comments(
&self,
repo: String,
number: String,
query: &ListPullCommentsQuery,
) -> Result<Vec<crate::models::PullRequestComment>> {
let path = format!("/{}/-/pulls/{}/comments", repo, number);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::PullRequestComment>>(Method::GET, url)
.await
}
pub async fn list_pull_commit_statuses(
&self,
repo: String,
number: i64,
) -> Result<crate::models::CommitStatuses> {
let path = format!("/{}/-/pulls/{}/commit-statuses", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::CommitStatuses>(Method::GET, url)
.await
}
pub async fn list_pull_commits(
&self,
repo: String,
number: String,
query: &ListPullCommitsQuery,
) -> Result<Vec<crate::models::Commit>> {
let path = format!("/{}/-/pulls/{}/commits", repo, number);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::Commit>>(Method::GET, url)
.await
}
pub async fn list_pull_files(
&self,
repo: String,
number: String,
) -> Result<Vec<crate::models::PullFile>> {
let path = format!("/{}/-/pulls/{}/files", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<Vec<crate::models::PullFile>>(Method::GET, url)
.await
}
pub async fn list_pull_labels(
&self,
repo: String,
number: i64,
query: &ListPullLabelsQuery,
) -> Result<Vec<crate::models::Label>> {
let path = format!("/{}/-/pulls/{}/labels", repo, number);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::Label>>(Method::GET, url)
.await
}
pub async fn list_pull_review_comments(
&self,
repo: String,
number: i64,
review_id: i64,
query: &ListPullReviewCommentsQuery,
) -> Result<Vec<crate::models::PullReviewComment>> {
let path = format!(
"/{}/-/pulls/{}/reviews/{}/comments",
repo, number, review_id
);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::PullReviewComment>>(Method::GET, url)
.await
}
pub async fn list_pull_reviews(
&self,
repo: String,
number: String,
query: &ListPullReviewsQuery,
) -> Result<Vec<crate::models::PullReview>> {
let path = format!("/{}/-/pulls/{}/reviews", repo, number);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::PullReview>>(Method::GET, url)
.await
}
pub async fn list_pulls(
&self,
repo: String,
query: &ListPullsQuery,
) -> Result<Vec<crate::models::PullRequest>> {
let path = format!("/{}/-/pulls", repo);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.page {
pairs.append_pair("page", &v.to_string());
}
if let Some(v) = query.page_size {
pairs.append_pair("page_size", &v.to_string());
}
if let Some(ref v) = query.state {
pairs.append_pair("state", v);
}
if let Some(ref v) = query.authors {
pairs.append_pair("authors", v);
}
if let Some(ref v) = query.reviewers {
pairs.append_pair("reviewers", v);
}
if let Some(ref v) = query.reviewers_operator {
pairs.append_pair("reviewers_operator", v);
}
if let Some(ref v) = query.assignees {
pairs.append_pair("assignees", v);
}
if let Some(ref v) = query.assignees_operator {
pairs.append_pair("assignees_operator", v);
}
if let Some(ref v) = query.labels {
pairs.append_pair("labels", v);
}
if let Some(ref v) = query.labels_operator {
pairs.append_pair("labels_operator", v);
}
if let Some(ref v) = query.base_ref {
pairs.append_pair("base_ref", v);
}
if let Some(ref v) = query.updated_time_begin {
pairs.append_pair("updated_time_begin", v);
}
if let Some(ref v) = query.updated_time_end {
pairs.append_pair("updated_time_end", v);
}
if let Some(ref v) = query.order_by {
pairs.append_pair("order_by", v);
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::PullRequest>>(Method::GET, url)
.await
}
pub async fn list_pulls_by_numbers(
&self,
repo: String,
query: &ListPullsByNumbersQuery,
) -> Result<Vec<crate::models::PullRequestInfo>> {
let path = format!("/{}/-/pull-in-batch", repo);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(ref vs) = query.n {
for v in vs {
pairs.append_pair("n", v);
}
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::PullRequestInfo>>(Method::GET, url)
.await
}
pub async fn merge_pull(
&self,
repo: String,
number: String,
body: &crate::models::MergePullRequest,
) -> Result<crate::models::MergePullResponse> {
let path = format!("/{}/-/pulls/{}/merge", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::MergePullResponse, _>(Method::PUT, url, body)
.await
}
pub async fn patch_pull(
&self,
repo: String,
number: String,
body: &crate::models::PatchPullRequest,
) -> Result<crate::models::Pull> {
let path = format!("/{}/-/pulls/{}", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Pull, _>(Method::PATCH, url, body)
.await
}
pub async fn patch_pull_comment(
&self,
repo: String,
number: String,
comment_id: i64,
body: &crate::models::PatchPullCommentForm,
) -> Result<crate::models::PullRequestComment> {
let path = format!("/{}/-/pulls/{}/comments/{}", repo, number, comment_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::PullRequestComment, _>(Method::PATCH, url, body)
.await
}
pub async fn post_pull(
&self,
repo: String,
body: &crate::models::PullCreationForm,
) -> Result<crate::models::Pull> {
let path = format!("/{}/-/pulls", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Pull, _>(Method::POST, url, body)
.await
}
pub async fn post_pull_assignees(
&self,
repo: String,
number: String,
body: &crate::models::PostPullAssigneesForm,
) -> Result<crate::models::Pull> {
let path = format!("/{}/-/pulls/{}/assignees", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Pull, _>(Method::POST, url, body)
.await
}
pub async fn post_pull_comment(
&self,
repo: String,
number: String,
body: &crate::models::PullCommentCreationForm,
) -> Result<crate::models::PullRequestComment> {
let path = format!("/{}/-/pulls/{}/comments", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::PullRequestComment, _>(Method::POST, url, body)
.await
}
pub async fn post_pull_labels(
&self,
repo: String,
number: String,
body: &crate::models::PostPullLabelsForm,
) -> Result<crate::models::Label> {
let path = format!("/{}/-/pulls/{}/labels", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Label, _>(Method::POST, url, body)
.await
}
pub async fn post_pull_request_review_reply(
&self,
repo: String,
number: i64,
review_id: i64,
body: &crate::models::PostPullRequestReviewReplyForm,
) -> Result<crate::models::PullReviewComment> {
let path = format!("/{}/-/pulls/{}/reviews/{}/replies", repo, number, review_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::PullReviewComment, _>(Method::POST, url, body)
.await
}
pub async fn post_pull_review(
&self,
repo: String,
number: String,
body: &crate::models::PullReviewCreationForm,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/pulls/{}/reviews", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::POST, url, body)
.await
}
pub async fn put_pull_labels(
&self,
repo: String,
number: String,
body: &crate::models::PutPullLabelsForm,
) -> Result<crate::models::Label> {
let path = format!("/{}/-/pulls/{}/labels", repo, number);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Label, _>(Method::PUT, url, body)
.await
}
pub async fn upload_files(
&self,
repo: String,
body: &crate::models::UploadRequestParams,
) -> Result<crate::models::UploadAssetsResponse> {
let path = format!("/{}/-/upload/files", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::UploadAssetsResponse, _>(Method::POST, url, body)
.await
}
pub async fn upload_imgs(
&self,
repo: String,
body: &crate::models::UploadRequestParams,
) -> Result<crate::models::UploadAssetsResponse> {
let path = format!("/{}/-/upload/imgs", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::UploadAssetsResponse, _>(Method::POST, url, body)
.await
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullCommentsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl ListPullCommentsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullCommitsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl ListPullCommitsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullLabelsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl ListPullLabelsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullReviewCommentsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl ListPullReviewCommentsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullReviewsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
}
impl ListPullReviewsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authors: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reviewers: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reviewers_operator: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub assignees: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub assignees_operator: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub labels: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub labels_operator: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_ref: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub updated_time_begin: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub updated_time_end: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<String>,
}
impl ListPullsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn page(mut self, v: impl Into<i64>) -> Self {
self.page = Some(v.into());
self
}
pub fn page_size(mut self, v: impl Into<i64>) -> Self {
self.page_size = Some(v.into());
self
}
pub fn state(mut self, v: impl Into<String>) -> Self {
self.state = Some(v.into());
self
}
pub fn authors(mut self, v: impl Into<String>) -> Self {
self.authors = Some(v.into());
self
}
pub fn reviewers(mut self, v: impl Into<String>) -> Self {
self.reviewers = Some(v.into());
self
}
pub fn reviewers_operator(mut self, v: impl Into<String>) -> Self {
self.reviewers_operator = Some(v.into());
self
}
pub fn assignees(mut self, v: impl Into<String>) -> Self {
self.assignees = Some(v.into());
self
}
pub fn assignees_operator(mut self, v: impl Into<String>) -> Self {
self.assignees_operator = Some(v.into());
self
}
pub fn labels(mut self, v: impl Into<String>) -> Self {
self.labels = Some(v.into());
self
}
pub fn labels_operator(mut self, v: impl Into<String>) -> Self {
self.labels_operator = Some(v.into());
self
}
pub fn base_ref(mut self, v: impl Into<String>) -> Self {
self.base_ref = Some(v.into());
self
}
pub fn updated_time_begin(mut self, v: impl Into<String>) -> Self {
self.updated_time_begin = Some(v.into());
self
}
pub fn updated_time_end(mut self, v: impl Into<String>) -> Self {
self.updated_time_end = Some(v.into());
self
}
pub fn order_by(mut self, v: impl Into<String>) -> Self {
self.order_by = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListPullsByNumbersQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub n: Option<Vec<String>>,
}
impl ListPullsByNumbersQuery {
pub fn new() -> Self {
Self::default()
}
pub fn n(mut self, v: impl Into<Vec<String>>) -> Self {
self.n = Some(v.into());
self
}
}