smbcloud_cli/project/
mod.rs

1pub mod cli;
2pub mod crud_create;
3pub mod crud_delete;
4pub mod crud_read;
5mod deployment;
6
7use self::cli::Commands;
8use crate::{
9    cli::CommandResult,
10    project::{
11        crud_create::process_project_init,
12        crud_delete::process_project_delete,
13        crud_read::{process_project_list, process_project_show},
14        deployment::process_deployment,
15    },
16    ui::{succeed_message, succeed_symbol},
17};
18use anyhow::{anyhow, Result};
19use log::debug;
20use smbcloud_model::project::Config;
21use smbcloud_networking::environment::Environment;
22use smbcloud_networking_project::get_project;
23use spinners::Spinner;
24use std::{fs::OpenOptions, io::Write};
25
26pub async fn process_project(env: Environment, commands: Commands) -> Result<CommandResult> {
27    match commands {
28        Commands::New {} => process_project_init(env).await,
29        Commands::List {} => process_project_list(env).await,
30        Commands::Show { id } => process_project_show(env, id).await,
31        Commands::Delete { id } => process_project_delete(env, id).await,
32        Commands::Use { id } => {
33            let project = get_project(env, id).await?;
34
35            let config = Config {
36                current_project: Some(project),
37                current_auth_app: None,
38            };
39
40            let spinner = Spinner::new(
41                spinners::Spinners::SimpleDotsScrolling,
42                succeed_message("Loading"),
43            );
44            match home::home_dir() {
45                Some(path) => {
46                    debug!("{}", path.to_str().unwrap());
47                    let mut file = OpenOptions::new()
48                        .create(true)
49                        .truncate(true)
50                        .write(true)
51                        .open([path.to_str().unwrap(), "/.smb/config.json"].join(""))?;
52                    let json = serde_json::to_string(&config)?;
53                    file.write_all(json.as_bytes())?;
54
55                    Ok(CommandResult {
56                        spinner,
57                        symbol: succeed_symbol(),
58                        msg: succeed_message("Use project successful."),
59                    })
60                }
61                None => {
62                    let error = anyhow!("Failed to get home directory.");
63                    Err(error)
64                }
65            }
66        }
67        Commands::Deployment { id } => process_deployment(env, id).await,
68    }
69}