smbcloud_cli/project/
crud_update.rs

1use anyhow::{anyhow, Result};
2use dialoguer::{theme::ColorfulTheme, Input};
3use smbcloud_networking::{environment::Environment, get_smb_token};
4use smbcloud_networking_project::{
5    crud_project_read::get_project, crud_project_update::update_project_description,
6};
7use spinners::Spinner;
8
9use crate::{
10    account::{lib::is_logged_in, login::process_login},
11    cli::CommandResult,
12    ui::{description, succeed_message, succeed_symbol},
13};
14
15pub async fn process_project_update_description(
16    env: Environment,
17    project_id: String,
18) -> Result<CommandResult> {
19    // Check credentials.
20    if !is_logged_in(env) {
21        let _ = process_login(env).await;
22    }
23
24    let access_token = get_smb_token(env).await?;
25    let project = get_project(env, access_token.clone(), project_id.clone()).await?;
26
27    if let Some(project_description) = project.description {
28        println!("Description: {}", description(&project_description));
29    }
30
31    // Prompt for new description
32    let new_description = match Input::<String>::with_theme(&ColorfulTheme::default())
33        .with_prompt("New description")
34        .interact()
35    {
36        Ok(desc) => desc,
37        Err(_) => return Err(anyhow!("Invalid description.")),
38    };
39    let spinner = Spinner::new(
40        spinners::Spinners::SimpleDotsScrolling,
41        succeed_message("Loading"),
42    );
43    update_project_description(env, access_token, project_id, &new_description).await?;
44    Ok(CommandResult {
45        spinner,
46        symbol: succeed_symbol(),
47        msg: succeed_message("Updated."),
48    })
49}