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