wekan-cli 0.12.0

Agent-first, human-friendly command-line client for Wekan
Documentation
use clap::Args;

use crate::{
    command_result::{CommandSuccess, ProfileItem},
    config::profiles::{ProfileStore, parse_profile_name},
    error::AppError,
};

use super::profile_not_found;

#[derive(Debug, Args)]
pub struct UseArgs {
    #[arg(value_parser = parse_profile_name)]
    pub name: String,
}

pub(super) fn execute(
    args: UseArgs,
    profile_store: &dyn ProfileStore,
) -> Result<CommandSuccess, AppError> {
    let mut mutation = profile_store.lock_mutation().map_err(AppError::from)?;
    let profile = mutation
        .document()
        .profile(&args.name)
        .ok_or_else(|| profile_not_found(&args.name))?;
    let server = profile.server().to_owned();
    if mutation.document().active_profile() != Some(args.name.as_str()) {
        let mut document = mutation.document().clone();
        document.set_active_profile(Some(args.name.clone()));
        mutation.save(document)?;
    }
    Ok(CommandSuccess::ProfileUsed(ProfileItem {
        name: args.name,
        server,
        active: true,
    }))
}