bitwarden_sm/projects/
list.rs

1use bitwarden_api_api::models::ProjectResponseModelListResponseModel;
2use bitwarden_core::{client::Client, key_management::KeyIds};
3use bitwarden_crypto::KeyStoreContext;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use uuid::Uuid;
7
8use crate::{error::SecretsManagerError, projects::ProjectResponse};
9
10#[derive(Serialize, Deserialize, Debug, JsonSchema)]
11#[serde(rename_all = "camelCase", deny_unknown_fields)]
12pub struct ProjectsListRequest {
13    /// Organization to retrieve all the projects from
14    pub organization_id: Uuid,
15}
16
17pub(crate) async fn list_projects(
18    client: &Client,
19    input: &ProjectsListRequest,
20) -> Result<ProjectsResponse, SecretsManagerError> {
21    let config = client.internal.get_api_configurations().await;
22    let res = bitwarden_api_api::apis::projects_api::organizations_organization_id_projects_get(
23        &config.api,
24        input.organization_id,
25    )
26    .await?;
27
28    let key_store = client.internal.get_key_store();
29
30    ProjectsResponse::process_response(res, &mut key_store.context())
31}
32
33#[derive(Serialize, Deserialize, Debug, JsonSchema)]
34#[serde(rename_all = "camelCase", deny_unknown_fields)]
35pub struct ProjectsResponse {
36    pub data: Vec<ProjectResponse>,
37}
38
39impl ProjectsResponse {
40    pub(crate) fn process_response(
41        response: ProjectResponseModelListResponseModel,
42        ctx: &mut KeyStoreContext<KeyIds>,
43    ) -> Result<Self, SecretsManagerError> {
44        let data = response.data.unwrap_or_default();
45
46        Ok(ProjectsResponse {
47            data: data
48                .into_iter()
49                .map(|r| ProjectResponse::process_response(r, ctx))
50                .collect::<Result<_, _>>()?,
51        })
52    }
53}