rust-cnb 0.1.2

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

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

/// Build API 客户端
pub struct BuildClient {
    base_url: String,
    client: Client,
}

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

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

    /// 查询流水线Stage详情。Get pipeline build stage detail.
    pub async fn get_repo_build_logs_stage_sn_pipeline_id_stage_id(
        &self,
        repo: String,
        sn: String,
        pipeline_id: String,
        stage_id: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/logs/stage/{}/{}/{}", repo, sn, pipeline_id, stage_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()))
        }
    }

    /// 查询流水线构建状态。Get pipeline build status.
    pub async fn get_repo_build_status_sn(
        &self,
        repo: String,
        sn: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/status/{}", 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()))
        }
    }

    /// 开始一个构建。Start a build.
    pub async fn post_repo_build_start(
        &self,
        repo: String,
        request_data: serde_json::Value,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/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()))
        }
    }

    /// 删除流水线日志内容。Delete pipeline logs content.
    pub async fn delete_repo_build_logs_sn(
        &self,
        repo: String,
        sn: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/logs/{}", repo, sn);
        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()))
        }
    }

    /// 流水线runner日志下载。Pipeline runner log download.
    pub async fn get_repo_build_runner_download_log_pipeline_id(
        &self,
        repo: String,
        pipeline_id: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/runner/download/log/{}", repo, pipeline_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()))
        }
    }

    /// 查询流水线构建列表。List pipeline builds.
    pub async fn get_repo_build_logs(
        &self,
        repo: String,
        create_time: Option<String>,
        end_time: Option<String>,
        event: Option<String>,
        page: Option<i64>,
        pagesize: Option<i64>,
        sha: Option<String>,
        sn: Option<String>,
        source_ref: Option<String>,
        status: Option<String>,
        target_ref: Option<String>,
        user_id: Option<String>,
        user_name: Option<String>,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/logs", repo);
        let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
        
        if let Some(value) = create_time {
            url.query_pairs_mut().append_pair("createTime", &value.to_string());
        }
        if let Some(value) = end_time {
            url.query_pairs_mut().append_pair("endTime", &value.to_string());
        }
        if let Some(value) = event {
            url.query_pairs_mut().append_pair("event", &value.to_string());
        }
        if let Some(value) = page {
            url.query_pairs_mut().append_pair("page", &value.to_string());
        }
        if let Some(value) = pagesize {
            url.query_pairs_mut().append_pair("pagesize", &value.to_string());
        }
        if let Some(value) = sha {
            url.query_pairs_mut().append_pair("sha", &value.to_string());
        }
        if let Some(value) = sn {
            url.query_pairs_mut().append_pair("sn", &value.to_string());
        }
        if let Some(value) = source_ref {
            url.query_pairs_mut().append_pair("sourceRef", &value.to_string());
        }
        if let Some(value) = status {
            url.query_pairs_mut().append_pair("status", &value.to_string());
        }
        if let Some(value) = target_ref {
            url.query_pairs_mut().append_pair("targetRef", &value.to_string());
        }
        if let Some(value) = user_id {
            url.query_pairs_mut().append_pair("userId", &value.to_string());
        }
        if let Some(value) = user_name {
            url.query_pairs_mut().append_pair("userName", &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()))
        }
    }

    /// 停止一个构建。 Stop a build.
    pub async fn post_repo_build_stop_sn(
        &self,
        repo: String,
        sn: String,
    ) -> Result<Value> {
        let path = format!("/{}/-/build/stop/{}", repo, sn);
        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()))
        }
    }

}