use build_it::Builder;
use serde::Serialize;
use teatime_macros::QueryParams;
use crate::error::Result;
use crate::model::issues::{Issue, IssueType, State};
#[derive(Debug, Clone, Serialize, Builder, QueryParams)]
pub struct ListIssuesBuilder {
#[skip]
#[serde(skip)]
#[query_params(skip)]
owner: String,
#[skip]
#[serde(skip)]
#[query_params(skip)]
repo: String,
pub state: Option<State>,
#[query_params(skip)]
pub labels: Option<Vec<String>>,
#[query_params(rename = "q")]
pub query: Option<String>,
#[query_params(rename = "type")]
pub issue_type: Option<IssueType>,
pub milestone: Option<String>,
pub since: Option<String>,
pub before: Option<String>,
pub created_by: Option<String>,
pub assigned_by: Option<String>,
pub mentioned_by: Option<String>,
pub page: Option<i64>,
pub limit: Option<i64>,
}
impl ListIssuesBuilder {
pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
Self {
owner: owner.to_string(),
repo: repo.to_string(),
state: None,
labels: None,
query: None,
issue_type: None,
milestone: None,
since: None,
before: None,
created_by: None,
assigned_by: None,
mentioned_by: None,
page: None,
limit: None,
}
}
pub async fn send(&self, client: &crate::Client) -> Result<Vec<Issue>> {
let owner = &self.owner;
let repo = &self.repo;
let mut req = client.get(format!("repos/{owner}/{repo}/issues")).build()?;
self.append_query_params(&mut req);
if let Some(labels) = &self.labels {
req.url_mut()
.query_pairs_mut()
.append_pair("value", &labels.join(","));
}
let res = client.make_request(req).await?;
client.parse_response(res).await
}
}