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#[allow(missing_docs)]
11#[derive(Serialize, Deserialize, Debug, JsonSchema)]
12#[serde(rename_all = "camelCase", deny_unknown_fields)]
13pub struct ProjectsListRequest {
14 pub organization_id: Uuid,
16}
17
18pub(crate) async fn list_projects(
19 client: &Client,
20 input: &ProjectsListRequest,
21) -> Result<ProjectsResponse, SecretsManagerError> {
22 let config = client.internal.get_api_configurations().await;
23 let res = bitwarden_api_api::apis::projects_api::organizations_organization_id_projects_get(
24 &config.api,
25 input.organization_id,
26 )
27 .await?;
28
29 let key_store = client.internal.get_key_store();
30
31 ProjectsResponse::process_response(res, &mut key_store.context())
32}
33
34#[allow(missing_docs)]
35#[derive(Serialize, Deserialize, Debug, JsonSchema)]
36#[serde(rename_all = "camelCase", deny_unknown_fields)]
37pub struct ProjectsResponse {
38 pub data: Vec<ProjectResponse>,
39}
40
41impl ProjectsResponse {
42 pub(crate) fn process_response(
43 response: ProjectResponseModelListResponseModel,
44 ctx: &mut KeyStoreContext<KeyIds>,
45 ) -> Result<Self, SecretsManagerError> {
46 let data = response.data.unwrap_or_default();
47
48 Ok(ProjectsResponse {
49 data: data
50 .into_iter()
51 .map(|r| ProjectResponse::process_response(r, ctx))
52 .collect::<Result<_, _>>()?,
53 })
54 }
55}