rust-cnb 0.1.2

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

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

/// Repositories API 客户端
pub struct RepositoriesClient {
    base_url: String,
    client: Client,
}

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

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

    /// 改变仓库可见性
    pub async fn post_repo_settings_set_visibility(
        &self,
        repo: String,
        visibility: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/settings/set_visibility", repo);
        let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
        
        url.query_pairs_mut().append_pair("visibility", &visibility.to_string());

                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()))
        }
    }

    /// 转移仓库
    pub async fn post_repo_transfer(
        &self,
        repo: String,
        request_data: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}/-/transfer", repo);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

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



        request = request.json(&request_data);

        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()))
        }
    }

    /// 获取指定用户的用户仓库墙。 Get a list of repositories that the specified user has pinned.
    pub async fn get_users_username_pinned_repos(
        &self,
        username: String,
    ) -> Result<Value> {
        let path = format!("/users/{}/pinned-repos", username);
        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()))
        }
    }

    /// 获取指定仓库信息。Get information for the specified repository.
    pub async fn get_repo(
        &self,
        repo: String,
    ) -> Result<Value> {
        let path = format!("/{}", 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()))
        }
    }

    /// 删除指定仓库。Delete the specified repository.
    pub async fn delete_repo(
        &self,
        repo: String,
        x_cnb_identity_ticket: Option<String>,
    ) -> Result<Value> {
        let path = format!("/{}", repo);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

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

        if let Some(value) = x_cnb_identity_ticket {
            request = request.header("x-cnb-identity-ticket", value);
        }


        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()))
        }
    }

    /// 更新仓库信息, 可更新的内容为: 仓库简介, 仓库站点, 仓库主题, 开源许可证。updates repository details including description, website URL,topics and license type.
    pub async fn patch_repo(
        &self,
        repo: String,
        request_data: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}", repo);
        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
        

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



        request = request.json(&request_data);

        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()))
        }
    }

    /// 获取当前用户 star 的仓库列表。List all stared repositories.
    pub async fn get_user_stared_repos(
        &self,
        page: Option<i64>,
        page_size: Option<i64>,
        search: Option<String>,
        desc: Option<bool>,
        order_by: Option<String>,
    ) -> Result<Value> {
        let path = format!("/user/stared-repos");
        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());
        }
        if let Some(value) = search {
            url.query_pairs_mut().append_pair("search", &value.to_string());
        }
        if let Some(value) = desc {
            url.query_pairs_mut().append_pair("desc", &value.to_string());
        }
        if let Some(value) = order_by {
            url.query_pairs_mut().append_pair("order_by", &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()))
        }
    }

    /// 获取指定用户有指定以上权限并且客人态可见的仓库。List repositories where the specified user has the specified permission level or higher and are visible to guests.
    pub async fn get_users_username_repos(
        &self,
        username: String,
        search: Option<String>,
        filter_type: Option<String>,
        flags: Option<String>,
        status: Option<String>,
        role: Option<String>,
        page: Option<i64>,
        page_size: Option<i64>,
        desc: Option<bool>,
        order_by: Option<String>,
    ) -> Result<Value> {
        let path = format!("/users/{}/repos", username);
        let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
        
        if let Some(value) = search {
            url.query_pairs_mut().append_pair("search", &value.to_string());
        }
        if let Some(value) = filter_type {
            url.query_pairs_mut().append_pair("filter_type", &value.to_string());
        }
        if let Some(value) = flags {
            url.query_pairs_mut().append_pair("flags", &value.to_string());
        }
        if let Some(value) = status {
            url.query_pairs_mut().append_pair("status", &value.to_string());
        }
        if let Some(value) = role {
            url.query_pairs_mut().append_pair("role", &value.to_string());
        }
        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());
        }
        if let Some(value) = desc {
            url.query_pairs_mut().append_pair("desc", &value.to_string());
        }
        if let Some(value) = order_by {
            url.query_pairs_mut().append_pair("order_by", &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()))
        }
    }

    /// 获取当前用户拥有指定权限及其以上权限的仓库。List repositories owned by the current user with the specified permissions or higher.
    pub async fn get_user_repos(
        &self,
        page: Option<i64>,
        page_size: Option<i64>,
        search: Option<String>,
        filter_type: Option<String>,
        role: Option<String>,
        flags: Option<String>,
        status: Option<String>,
        order_by: Option<String>,
        desc: Option<bool>,
    ) -> Result<Value> {
        let path = format!("/user/repos");
        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());
        }
        if let Some(value) = search {
            url.query_pairs_mut().append_pair("search", &value.to_string());
        }
        if let Some(value) = filter_type {
            url.query_pairs_mut().append_pair("filter_type", &value.to_string());
        }
        if let Some(value) = role {
            url.query_pairs_mut().append_pair("role", &value.to_string());
        }
        if let Some(value) = flags {
            url.query_pairs_mut().append_pair("flags", &value.to_string());
        }
        if let Some(value) = status {
            url.query_pairs_mut().append_pair("status", &value.to_string());
        }
        if let Some(value) = order_by {
            url.query_pairs_mut().append_pair("order_by", &value.to_string());
        }
        if let Some(value) = desc {
            url.query_pairs_mut().append_pair("desc", &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()))
        }
    }

}