use build_it::Builder;
use serde::Serialize;
use teatime_macros::QueryParams;
use crate::{error::Result, model::repos::Repository, Client};
#[derive(Debug, Clone, Serialize, Builder)]
#[serde(default)]
pub struct CreateForkBuilder {
#[skip]
#[serde(skip)]
owner: String,
#[skip]
#[serde(skip)]
repo: String,
name: Option<String>,
organization: Option<String>,
}
impl CreateForkBuilder {
pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
Self {
owner: owner.to_string(),
repo: repo.to_string(),
organization: None,
name: None,
}
}
pub async fn send(&self, client: &Client) -> Result<Repository> {
let owner = &self.owner;
let repo = &self.repo;
let req = client
.post(format!("repos/{owner}/{repo}/forks"))
.json(self)
.build()?;
let res = client.make_request(req).await?;
client.parse_response(res).await
}
}
#[derive(Debug, Clone, Serialize, Builder, QueryParams)]
#[serde(default)]
pub struct ListForksBuilder {
#[skip]
#[serde(skip)]
#[query_params(skip)]
owner: String,
#[skip]
#[serde(skip)]
#[query_params(skip)]
repo: String,
#[serde(skip_serializing_if = "Option::is_none")]
page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
limit: Option<i64>,
}
impl ListForksBuilder {
pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
Self {
owner: owner.to_string(),
repo: repo.to_string(),
page: None,
limit: None,
}
}
pub async fn send(&self, client: &Client) -> Result<Vec<Repository>> {
let owner = &self.owner;
let repo = &self.repo;
let mut req = client.get(format!("repos/{owner}/{repo}/forks")).build()?;
self.append_query_params(&mut req);
let res = client.make_request(req).await?;
client.parse_response(res).await
}
}