smbcloud_cli/project/
mod.rs1pub 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}