use std::sync::Arc;
use crate::error::Result;
use crate::http::HttpClient;
use crate::types::{
CreateWorkspaceRequest, InviteRequest, UpdateRoleRequest, Workspace, WorkspaceActionResponse,
WorkspaceDetail,
};
#[derive(Clone)]
pub struct WorkspacesResource {
pub(crate) http: Arc<HttpClient>,
}
impl WorkspacesResource {
pub async fn list(&self, jwt: &str) -> Result<Vec<Workspace>> {
self.http.get("/workspaces", Some(jwt)).await
}
pub async fn create(
&self,
request: CreateWorkspaceRequest,
jwt: &str,
) -> Result<Workspace> {
self.http.post("/workspaces", &request, Some(jwt)).await
}
pub async fn get(&self, workspace_id: &str, jwt: &str) -> Result<WorkspaceDetail> {
self.http
.get(&format!("/workspaces/{workspace_id}"), Some(jwt))
.await
}
pub async fn invite(
&self,
workspace_id: &str,
request: InviteRequest,
jwt: &str,
) -> Result<WorkspaceActionResponse> {
self.http
.post(&format!("/workspaces/{workspace_id}/invite"), &request, Some(jwt))
.await
}
pub async fn update_member_role(
&self,
workspace_id: &str,
user_id: &str,
request: UpdateRoleRequest,
jwt: &str,
) -> Result<WorkspaceActionResponse> {
self.http
.patch(
&format!("/workspaces/{workspace_id}/members/{user_id}"),
&request,
Some(jwt),
)
.await
}
pub async fn remove_member(
&self,
workspace_id: &str,
user_id: &str,
jwt: &str,
) -> Result<WorkspaceActionResponse> {
self.http
.delete(
&format!("/workspaces/{workspace_id}/members/{user_id}"),
Some(jwt),
)
.await
}
}