Skip to main content

wekan_cli/commands/profile/
show.rs

1use clap::Args;
2
3use crate::{
4    command_result::{CommandSuccess, ProfileItem},
5    config::profiles::{ProfileDocument, ProfileStore, parse_profile_name},
6    error::AppError,
7};
8
9use super::profile_not_found;
10
11#[derive(Debug, Args)]
12pub struct ShowArgs {
13    #[arg(value_parser = parse_profile_name)]
14    pub name: String,
15}
16
17pub(super) fn execute(
18    args: ShowArgs,
19    profile_store: &dyn ProfileStore,
20) -> Result<CommandSuccess, AppError> {
21    let snapshot = profile_store.read().map_err(AppError::from)?;
22    let item = item_for(snapshot.document(), &args.name)?;
23    Ok(CommandSuccess::ProfileShown(item))
24}
25
26fn item_for(document: &ProfileDocument, name: &str) -> Result<ProfileItem, AppError> {
27    let profile = document
28        .profile(name)
29        .ok_or_else(|| profile_not_found(name))?;
30    Ok(ProfileItem {
31        name: name.to_owned(),
32        server: profile.server().to_owned(),
33        active: document.active_profile() == Some(name),
34    })
35}