smbcloud_cli/project/
crud_update.rs1use 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 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 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}