smbcloud_cli/project/
crud_update.rs

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