smbcloud_cli/project/
crud_delete.rs

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