Skip to main content

wekan_cli/commands/profile/
list.rs

1use clap::Args;
2
3use crate::{
4    command_result::{CommandSuccess, ProfileItem, ProfileListSuccess},
5    config::profiles::{ProfileDocument, ProfileStore},
6    error::AppError,
7};
8
9#[derive(Debug, Args)]
10pub struct ListArgs {}
11
12pub(super) fn execute(
13    _args: ListArgs,
14    profile_store: &dyn ProfileStore,
15) -> Result<CommandSuccess, AppError> {
16    let snapshot = profile_store.read().map_err(AppError::from)?;
17    let document = snapshot.document();
18    Ok(CommandSuccess::ProfileList(ProfileListSuccess {
19        active_profile: document.active_profile().map(str::to_owned),
20        profiles: profile_items(document),
21    }))
22}
23
24fn profile_items(document: &ProfileDocument) -> Vec<ProfileItem> {
25    document
26        .profiles()
27        .iter()
28        .map(|(name, profile)| ProfileItem {
29            name: name.clone(),
30            server: profile.server().to_owned(),
31            active: document.active_profile() == Some(name.as_str()),
32        })
33        .collect()
34}