wekan_cli/commands/profile/
show.rs1use 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}