bitwarden_sm/projects/
list.rs1use 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 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}