rust-cnb 0.1.2

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

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

/// Workspace API 客户端
pub struct WorkspaceClient {
    base_url: String,
    client: Client,
}

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

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

    /// 删除我的云原生开发环境。Delete my workspace.
    pub async fn post_workspace_delete(
        &self,
        request_data: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/workspace/delete");
        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()))
        }
    }

    /// 启动云原生开发环境,已存在环境则直接打开,否则重新创建开发环境。Start cloud-native dev. Opens existing env or creates a new one.
    pub async fn post_repo_workspace_start(
        &self,
        repo: String,
        request_data: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}/-/workspace/start", 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()))
        }
    }

    /// 停止/关闭我的云原生开发环境。Stop/close my workspace.
    pub async fn post_workspace_stop(
        &self,
        request_data: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/workspace/stop");
        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()))
        }
    }

    /// 获取我的云原生开发环境列表。List my workspaces.
    pub async fn get_workspace_list(
        &self,
        branch: Option<String>,
        end: Option<String>,
        page: Option<i64>,
        page_size: Option<i64>,
        slug: Option<String>,
        start: Option<String>,
        status: Option<String>,
    ) -> Result<Value> {
        let path = format!("/workspace/list");
        let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
        
        if let Some(value) = branch {
            url.query_pairs_mut().append_pair("branch", &value.to_string());
        }
        if let Some(value) = end {
            url.query_pairs_mut().append_pair("end", &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("pageSize", &value.to_string());
        }
        if let Some(value) = slug {
            url.query_pairs_mut().append_pair("slug", &value.to_string());
        }
        if let Some(value) = start {
            url.query_pairs_mut().append_pair("start", &value.to_string());
        }
        if let Some(value) = status {
            url.query_pairs_mut().append_pair("status", &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()))
        }
    }

    /// 根据流水线sn查询云原生开发访问地址。Query cloud-native development access address by pipeline SN.
    pub async fn get_repo_workspace_detail_sn(
        &self,
        repo: String,
        sn: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/workspace/detail/{}", repo, sn);
        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()))
        }
    }

}