Skip to main content

asana_cli/api/
workspaces.rs

1//! High level workspace operations built on the core API client.
2
3use crate::api::api_get;
4use crate::{
5    api::{ApiClient, ApiError},
6    models::{Workspace, WorkspaceListParams},
7};
8use futures_util::{StreamExt, pin_mut};
9
10/// List workspaces for the current user.
11///
12/// # Errors
13/// Returns [`ApiError`] if the API request fails or network errors occur.
14pub async fn list_workspaces(
15    client: &ApiClient,
16    params: WorkspaceListParams,
17) -> Result<Vec<Workspace>, ApiError> {
18    let stream = client.paginate_with_limit::<Workspace>("/workspaces", vec![], params.limit);
19    pin_mut!(stream);
20
21    let mut workspaces = Vec::new();
22    while let Some(page) = stream.next().await {
23        let mut page = page?;
24        workspaces.append(&mut page);
25    }
26
27    Ok(workspaces)
28}
29
30/// Get a single workspace by GID.
31///
32/// # Errors
33/// Returns [`ApiError`] if the API request fails or network errors occur.
34pub async fn get_workspace(client: &ApiClient, gid: &str) -> Result<Workspace, ApiError> {
35    api_get(client, &format!("/workspaces/{gid}")).await
36}