rust-cnb 0.1.2

[DEPRECATED - use `cnb` crate instead] rust-cnb with Generated API client
Documentation
//! Releases API 客户端

use crate::error::{ApiError, Result};
use reqwest::Client;
use serde_json::Value;
use url::Url;

/// Releases API 客户端
pub struct ReleasesClient {
    base_url: String,
    client: Client,
}

impl ReleasesClient {
    /// 创建新的 Releases API 客户端
    pub fn new(base_url: String, client: Client) -> Self {
        Self { base_url, client }
    }

    /// 设置认证信息
    pub fn with_auth(self, token: &str) -> Self {
        // 这里可以扩展认证逻辑
        self
    }

    /// 确认 Release asset 上传完成。Confirm release asset upload.
    pub async fn post_repo_releases_release_id_asset_upload_confirmation_upload_token_asset_path(
        &self,
        repo: String,
        release_id: String,
        upload_token: String,
        asset_path: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}/asset-upload-confirmation/{}/{}", repo, release_id, upload_token, asset_path);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::POST,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 通过 tag 查询指定 release,包含附件信息。Get a release by tag, include assets information.
    pub async fn get_repo_releases_tags_tag(
        &self,
        repo: String,
        tag: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/tags/{}", repo, tag);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::GET,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 根据 id	查询指定 release, 包含附件信息。Get a release by id, include assets information.
    pub async fn get_repo_releases_release_id(
        &self,
        repo: String,
        release_id: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}", repo, release_id);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::GET,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 删除指定的 release。Delete a release.
    pub async fn delete_repo_releases_release_id(
        &self,
        repo: String,
        release_id: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}", repo, release_id);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::DELETE,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 更新 release。Update a release.
    pub async fn patch_repo_releases_release_id(
        &self,
        repo: String,
        release_id: String,
        patch_release_form: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}", repo, release_id);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

        
        let mut request = self.client.request(
            reqwest::Method::PATCH,
            url
        );



        request = request.json(&patch_release_form);

        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 查询指定的 release asset。Get the specified release asset.
    pub async fn get_repo_releases_release_id_assets_asset_id(
        &self,
        repo: String,
        release_id: String,
        asset_id: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}/assets/{}", repo, release_id, asset_id);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::GET,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 删除指定的 release asset。Delete the specified release asset.
    pub async fn delete_repo_releases_release_id_assets_asset_id(
        &self,
        repo: String,
        release_id: String,
        asset_id: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}/assets/{}", repo, release_id, asset_id);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::DELETE,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 新增一个 Release asset。Create a release asset.
    pub async fn post_repo_releases_release_id_asset_upload_url(
        &self,
        repo: String,
        release_id: String,
        create_release_asset_upload_url_form: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/{}/asset-upload-url", repo, release_id);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

        
        let mut request = self.client.request(
            reqwest::Method::POST,
            url
        );



        request = request.json(&create_release_asset_upload_url_form);

        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 查询 release 列表。List releases.
    pub async fn get_repo_releases(
        &self,
        repo: String,
        page: Option<i64>,
        page_size: Option<i64>,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases", repo);
        let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
        
        if let Some(value) = page {
            url.query_pairs_mut().append_pair("page", &value.to_string());
        }
        if let Some(value) = page_size {
            url.query_pairs_mut().append_pair("page_size", &value.to_string());
        }

                let request = self.client.request(
            reqwest::Method::GET,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 新增一个 Release。Create a release.
    pub async fn post_repo_releases(
        &self,
        repo: String,
        create_release_form: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases", repo);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

        
        let mut request = self.client.request(
            reqwest::Method::POST,
            url
        );



        request = request.json(&create_release_form);

        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

    /// 查询 latest release。Query the latest release.
    pub async fn get_repo_releases_latest(
        &self,
        repo: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/releases/latest", repo);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

                let request = self.client.request(
            reqwest::Method::GET,
            url
        );
        



        let response = request.send().await?;
        
        if response.status().is_success() {
            let json: Value = response.json().await?;
            Ok(json)
        } else {
            Err(ApiError::HttpError(response.status().as_u16()))
        }
    }

}