smbcloud_cli/project/
crud_delete.rs

1use crate::{
2    account::lib::is_logged_in,
3    cli::CommandResult,
4    ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
5};
6use anyhow::{anyhow, Result};
7use dialoguer::{theme::ColorfulTheme, Input};
8use smbcloud_networking::{environment::Environment, get_smb_token};
9use smbcloud_networking_project::crud_project_delete::delete_project;
10use spinners::Spinner;
11
12pub async fn process_project_delete(env: Environment, id: String) -> Result<CommandResult> {
13    if !is_logged_in(env) {
14        return Err(anyhow!(fail_message("Please log in with `smb init`.")));
15    }
16
17    let confirmation = Input::<String>::with_theme(&ColorfulTheme::default())
18        .with_prompt("Are you sure you want to delete this project? (y/n)")
19        .interact()
20        .unwrap();
21
22    let spinner = Spinner::new(
23        spinners::Spinners::SimpleDotsScrolling,
24        succeed_message("Deleting project"),
25    );
26
27    if confirmation != "y" {
28        return Ok(CommandResult {
29            spinner,
30            symbol: succeed_symbol(),
31            msg: succeed_message("Cancelled."),
32        });
33    }
34    let access_token = get_smb_token(env).await?;
35    match delete_project(env, access_token, id).await {
36        Ok(_) => Ok(CommandResult {
37            spinner,
38            symbol: succeed_symbol(),
39            msg: succeed_message("Done. Project has been deleted."),
40        }),
41        Err(e) => Ok(CommandResult {
42            spinner,
43            symbol: fail_symbol(),
44            msg: fail_message(&e.to_string()),
45        }),
46    }
47}