#![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 RepositoriesClient {
inner: HttpInner,
}
impl RepositoriesClient {
pub fn new(inner: HttpInner) -> Self {
Self { inner }
}
pub async fn archive_repo(&self, slug: String) -> Result<serde_json::Value> {
let path = format!("/{}/-/settings/archive", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::POST, url)
.await
}
pub async fn create_repo(
&self,
slug: String,
body: &crate::models::CreateRepoReq,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/repos", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::POST, url, body)
.await
}
pub async fn delete_repo(&self, repo: String) -> Result<serde_json::Value> {
let path = format!("/{}", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn get_by_id(&self, repo: String) -> Result<crate::models::Repos4User> {
let path = format!("/{}", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::Repos4User>(Method::GET, url)
.await
}
pub async fn get_group_sub_repos(
&self,
slug: String,
query: &GetGroupSubReposQuery,
) -> Result<Vec<crate::models::Repos4User>> {
let path = format!("/{}/-/repos", slug);
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.filter_type {
pairs.append_pair("filter_type", v);
}
if let Some(ref v) = query.flags {
pairs.append_pair("flags", v);
}
if let Some(ref v) = query.flags_match {
pairs.append_pair("flags_match", v);
}
if let Some(ref v) = query.status {
pairs.append_pair("status", v);
}
if let Some(ref v) = query.order_by {
pairs.append_pair("order_by", v);
}
if let Some(v) = query.desc {
pairs.append_pair("desc", &v.to_string());
}
if let Some(ref v) = query.descendant {
pairs.append_pair("descendant", v);
}
if let Some(ref v) = query.search {
pairs.append_pair("search", v);
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::Repos4User>>(Method::GET, url)
.await
}
pub async fn get_pinned_repo_by_group(
&self,
slug: String,
) -> Result<Vec<crate::models::Repos4UserBase>> {
let path = format!("/{}/-/pinned-repos", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<Vec<crate::models::Repos4UserBase>>(Method::GET, url)
.await
}
pub async fn get_pinned_repo_by_id(
&self,
username: String,
) -> Result<Vec<crate::models::Repos4User>> {
let path = format!("/users/{}/pinned-repos", username);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<Vec<crate::models::Repos4User>>(Method::GET, url)
.await
}
pub async fn get_repos(&self, query: &GetReposQuery) -> Result<Vec<crate::models::Repos4User>> {
let path = "/user/repos".to_string();
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.search {
pairs.append_pair("search", v);
}
if let Some(ref v) = query.filter_type {
pairs.append_pair("filter_type", v);
}
if let Some(ref v) = query.role {
pairs.append_pair("role", v);
}
if let Some(ref v) = query.flags {
pairs.append_pair("flags", v);
}
if let Some(ref v) = query.flags_match {
pairs.append_pair("flags_match", v);
}
if let Some(ref v) = query.status {
pairs.append_pair("status", v);
}
if let Some(ref v) = query.order_by {
pairs.append_pair("order_by", v);
}
if let Some(v) = query.desc {
pairs.append_pair("desc", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::Repos4User>>(Method::GET, url)
.await
}
pub async fn get_repos_by_user_name(
&self,
username: String,
query: &GetReposByUserNameQuery,
) -> Result<Vec<crate::models::Repos4User>> {
let path = format!("/users/{}/repos", username);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(ref v) = query.search {
pairs.append_pair("search", v);
}
if let Some(ref v) = query.filter_type {
pairs.append_pair("filter_type", v);
}
if let Some(ref v) = query.flags {
pairs.append_pair("flags", v);
}
if let Some(ref v) = query.flags_match {
pairs.append_pair("flags_match", v);
}
if let Some(ref v) = query.status {
pairs.append_pair("status", v);
}
if let Some(ref v) = query.role {
pairs.append_pair("role", v);
}
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(v) = query.desc {
pairs.append_pair("desc", &v.to_string());
}
if let Some(ref v) = query.order_by {
pairs.append_pair("order_by", v);
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::Repos4User>>(Method::GET, url)
.await
}
pub async fn list_forks_repos(
&self,
repo: String,
query: &ListForksReposQuery,
) -> Result<crate::models::ListForks> {
let path = format!("/{}/-/forks", repo);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.start_from_root {
pairs.append_pair("start_from_root", &v.to_string());
}
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::<crate::models::ListForks>(Method::GET, url)
.await
}
pub async fn set_pinned_repo_by_group(
&self,
slug: String,
body: &Vec<String>,
) -> Result<Vec<crate::models::Repos4UserBase>> {
let path = format!("/{}/-/pinned-repos", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<Vec<crate::models::Repos4UserBase>, _>(Method::PUT, url, body)
.await
}
pub async fn set_repo_visibility(
&self,
repo: String,
query: &SetRepoVisibilityQuery,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/settings/set_visibility", repo);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(ref v) = query.visibility {
pairs.append_pair("visibility", v);
}
drop(pairs);
}
self.inner
.execute::<serde_json::Value>(Method::POST, url)
.await
}
pub async fn transfer_repo(
&self,
repo: String,
body: &crate::models::TransferSlugReq,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/transfer", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::POST, url, body)
.await
}
pub async fn un_archive_repo(&self, slug: String) -> Result<serde_json::Value> {
let path = format!("/{}/-/settings/unarchive", slug);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::POST, url)
.await
}
pub async fn update_repo(
&self,
repo: String,
body: &crate::models::RepoPatch,
) -> Result<serde_json::Value> {
let path = format!("/{}", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::PATCH, url, body)
.await
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct GetGroupSubReposQuery {
#[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 filter_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub flags: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub flags_match: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub desc: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub descendant: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<String>,
}
impl GetGroupSubReposQuery {
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 filter_type(mut self, v: impl Into<String>) -> Self {
self.filter_type = Some(v.into());
self
}
pub fn flags(mut self, v: impl Into<String>) -> Self {
self.flags = Some(v.into());
self
}
pub fn flags_match(mut self, v: impl Into<String>) -> Self {
self.flags_match = Some(v.into());
self
}
pub fn status(mut self, v: impl Into<String>) -> Self {
self.status = Some(v.into());
self
}
pub fn order_by(mut self, v: impl Into<String>) -> Self {
self.order_by = Some(v.into());
self
}
pub fn desc(mut self, v: impl Into<bool>) -> Self {
self.desc = Some(v.into());
self
}
pub fn descendant(mut self, v: impl Into<String>) -> Self {
self.descendant = Some(v.into());
self
}
pub fn search(mut self, v: impl Into<String>) -> Self {
self.search = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct GetReposQuery {
#[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 search: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub filter_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub flags: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub flags_match: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub desc: Option<bool>,
}
impl GetReposQuery {
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 search(mut self, v: impl Into<String>) -> Self {
self.search = Some(v.into());
self
}
pub fn filter_type(mut self, v: impl Into<String>) -> Self {
self.filter_type = Some(v.into());
self
}
pub fn role(mut self, v: impl Into<String>) -> Self {
self.role = Some(v.into());
self
}
pub fn flags(mut self, v: impl Into<String>) -> Self {
self.flags = Some(v.into());
self
}
pub fn flags_match(mut self, v: impl Into<String>) -> Self {
self.flags_match = Some(v.into());
self
}
pub fn status(mut self, v: impl Into<String>) -> Self {
self.status = Some(v.into());
self
}
pub fn order_by(mut self, v: impl Into<String>) -> Self {
self.order_by = Some(v.into());
self
}
pub fn desc(mut self, v: impl Into<bool>) -> Self {
self.desc = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[non_exhaustive]
pub struct GetReposByUserNameQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub filter_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub flags: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub flags_match: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[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 desc: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<String>,
}
impl GetReposByUserNameQuery {
pub fn new() -> Self {
Self::default()
}
pub fn search(mut self, v: impl Into<String>) -> Self {
self.search = Some(v.into());
self
}
pub fn filter_type(mut self, v: impl Into<String>) -> Self {
self.filter_type = Some(v.into());
self
}
pub fn flags(mut self, v: impl Into<String>) -> Self {
self.flags = Some(v.into());
self
}
pub fn flags_match(mut self, v: impl Into<String>) -> Self {
self.flags_match = Some(v.into());
self
}
pub fn status(mut self, v: impl Into<String>) -> Self {
self.status = Some(v.into());
self
}
pub fn role(mut self, v: impl Into<String>) -> Self {
self.role = Some(v.into());
self
}
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 desc(mut self, v: impl Into<bool>) -> Self {
self.desc = 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)]
#[non_exhaustive]
pub struct ListForksReposQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start_from_root: Option<bool>,
#[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 ListForksReposQuery {
pub fn new() -> Self {
Self::default()
}
pub fn start_from_root(mut self, v: impl Into<bool>) -> Self {
self.start_from_root = Some(v.into());
self
}
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)]
#[non_exhaustive]
pub struct SetRepoVisibilityQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub visibility: Option<String>,
}
impl SetRepoVisibilityQuery {
pub fn new() -> Self {
Self::default()
}
pub fn visibility(mut self, v: impl Into<String>) -> Self {
self.visibility = Some(v.into());
self
}
}