#![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 ReleasesClient {
inner: HttpInner,
}
impl ReleasesClient {
pub fn new(inner: HttpInner) -> Self {
Self { inner }
}
pub async fn delete_release(
&self,
repo: String,
release_id: String,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/releases/{}", repo, release_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn delete_release_asset(
&self,
repo: String,
release_id: String,
asset_id: String,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/releases/{}/assets/{}", repo, release_id, asset_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<serde_json::Value>(Method::DELETE, url)
.await
}
pub async fn get_latest_release(&self, repo: String) -> Result<crate::models::Release> {
let path = format!("/{}/-/releases/latest", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::Release>(Method::GET, url)
.await
}
pub async fn get_release_asset(
&self,
repo: String,
release_id: String,
asset_id: String,
) -> Result<crate::models::ReleaseAsset> {
let path = format!("/{}/-/releases/{}/assets/{}", repo, release_id, asset_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::ReleaseAsset>(Method::GET, url)
.await
}
pub async fn get_release_by_id(
&self,
repo: String,
release_id: String,
) -> Result<crate::models::Release> {
let path = format!("/{}/-/releases/{}", repo, release_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::Release>(Method::GET, url)
.await
}
pub async fn get_release_by_tag(
&self,
repo: String,
tag: String,
) -> Result<crate::models::Release> {
let path = format!("/{}/-/releases/tags/{}", repo, tag);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::Release>(Method::GET, url)
.await
}
pub async fn get_releases_asset(
&self,
repo: String,
tag: String,
filename: String,
query: &GetReleasesAssetQuery,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/releases/download/{}/{}", repo, tag, filename);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.share {
pairs.append_pair("share", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<serde_json::Value>(Method::GET, url)
.await
}
pub async fn list_releases(
&self,
repo: String,
query: &ListReleasesQuery,
) -> Result<Vec<crate::models::Release>> {
let path = format!("/{}/-/releases", 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());
}
drop(pairs);
}
self.inner
.execute::<Vec<crate::models::Release>>(Method::GET, url)
.await
}
pub async fn patch_release(
&self,
repo: String,
release_id: String,
body: &crate::models::PatchReleaseForm,
) -> Result<serde_json::Value> {
let path = format!("/{}/-/releases/{}", repo, release_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<serde_json::Value, _>(Method::PATCH, url, body)
.await
}
pub async fn post_release(
&self,
repo: String,
body: &crate::models::PostReleaseForm,
) -> Result<crate::models::Release> {
let path = format!("/{}/-/releases", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::Release, _>(Method::POST, url, body)
.await
}
pub async fn post_release_asset_upload_confirmation(
&self,
repo: String,
release_id: String,
upload_token: String,
asset_path: String,
query: &PostReleaseAssetUploadConfirmationQuery,
) -> Result<serde_json::Value> {
let path = format!(
"/{}/-/releases/{}/asset-upload-confirmation/{}/{}",
repo, release_id, upload_token, asset_path
);
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(v) = query.ttl {
pairs.append_pair("ttl", &v.to_string());
}
drop(pairs);
}
self.inner
.execute::<serde_json::Value>(Method::POST, url)
.await
}
pub async fn post_release_asset_upload_url(
&self,
repo: String,
release_id: String,
body: &crate::models::PostReleaseAssetUploadUrlForm,
) -> Result<crate::models::ReleaseAssetUploadUrl> {
let path = format!("/{}/-/releases/{}/asset-upload-url", repo, release_id);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::ReleaseAssetUploadUrl, _>(Method::POST, url, body)
.await
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetReleasesAssetQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub share: Option<bool>,
}
impl GetReleasesAssetQuery {
pub fn new() -> Self {
Self::default()
}
pub fn share(mut self, v: impl Into<bool>) -> Self {
self.share = Some(v.into());
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListReleasesQuery {
#[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 ListReleasesQuery {
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 PostReleaseAssetUploadConfirmationQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ttl: Option<i64>,
}
impl PostReleaseAssetUploadConfirmationQuery {
pub fn new() -> Self {
Self::default()
}
pub fn ttl(mut self, v: impl Into<i64>) -> Self {
self.ttl = Some(v.into());
self
}
}