#![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 WorkspaceClient {
inner: HttpInner,
}
impl WorkspaceClient {
pub fn new(inner: HttpInner) -> Self {
Self { inner }
}
pub async fn delete_workspace(
&self,
body: &crate::models::WorkspaceDeleteReq,
) -> Result<crate::models::WorkspaceDeleteResult> {
let path = "/workspace/delete".to_string();
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::WorkspaceDeleteResult, _>(Method::POST, url, body)
.await
}
pub async fn get_workspace_detail(
&self,
repo: String,
sn: String,
) -> Result<crate::models::WorkspaceDetailResult> {
let path = format!("/{}/-/workspace/detail/{}", repo, sn);
let mut url = self.inner.url(&path)?;
self.inner
.execute::<crate::models::WorkspaceDetailResult>(Method::GET, url)
.await
}
pub async fn list_workspaces(
&self,
query: &ListWorkspacesQuery,
) -> Result<crate::models::WorkspaceListResult> {
let path = "/workspace/list".to_string();
let mut url = self.inner.url(&path)?;
{
let mut pairs = url.query_pairs_mut();
if let Some(ref v) = query.branch {
pairs.append_pair("branch", v);
}
if let Some(ref v) = query.end {
pairs.append_pair("end", v);
}
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());
}
if let Some(ref v) = query.slug {
pairs.append_pair("slug", v);
}
if let Some(ref v) = query.start {
pairs.append_pair("start", v);
}
if let Some(ref v) = query.status {
pairs.append_pair("status", v);
}
drop(pairs);
}
self.inner
.execute::<crate::models::WorkspaceListResult>(Method::GET, url)
.await
}
pub async fn start_workspace(
&self,
repo: String,
body: &crate::models::StartWorkspaceReq,
) -> Result<crate::models::StartWorkspaceResult> {
let path = format!("/{}/-/workspace/start", repo);
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::StartWorkspaceResult, _>(Method::POST, url, body)
.await
}
pub async fn workspace_stop(
&self,
body: &crate::models::WorkspaceStopReq,
) -> Result<crate::models::WorkspaceStopResult> {
let path = "/workspace/stop".to_string();
let mut url = self.inner.url(&path)?;
self.inner
.execute_with_body::<crate::models::WorkspaceStopResult, _>(Method::POST, url, body)
.await
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListWorkspacesQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub end: Option<String>,
#[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>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub slug: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
}
impl ListWorkspacesQuery {
pub fn new() -> Self {
Self::default()
}
pub fn branch(mut self, v: impl Into<String>) -> Self {
self.branch = Some(v.into());
self
}
pub fn end(mut self, v: impl Into<String>) -> Self {
self.end = Some(v.into());
self
}
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
}
pub fn slug(mut self, v: impl Into<String>) -> Self {
self.slug = Some(v.into());
self
}
pub fn start(mut self, v: impl Into<String>) -> Self {
self.start = Some(v.into());
self
}
pub fn status(mut self, v: impl Into<String>) -> Self {
self.status = Some(v.into());
self
}
}