2 files changed
+44
-44
crates/cli/src/project/crud_read.rs
+41
-1
@@ -1,9 +1,12 @@
1
+use std::{fs::OpenOptions, io::Write};
2
+
3
use crate::{
4
cli::CommandResult,
5
ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
6
};
7
use anyhow::{anyhow, Result};
6
-use smbcloud_model::project::Project;
8
+use log::debug;
9
+use smbcloud_model::project::{Config, Project};
10
use smbcloud_networking::{environment::Environment, get_smb_token};
11
use smbcloud_networking_project::{crud_project_deployment_read::get_project, get_all};
12
use spinners::Spinner;
@@ -105,3 +108,40 @@ pub(crate) fn show_projects(projects: Vec<Project>) {
108
let table = Table::new(rows);
109
println!("{table}");
110
}
111
+
112
+pub(crate) async fn process_project_use(env: Environment, id: String) -> Result<CommandResult> {
113
+ let access_token = get_smb_token(env).await?;
114
+ let project = get_project(env, access_token, id).await?;
115
+
116
+ let config = Config {
117
+ current_project: Some(project),
118
+ current_auth_app: None,
119
+ };
120
+
121
+ let spinner = Spinner::new(
122
+ spinners::Spinners::SimpleDotsScrolling,
123
+ succeed_message("Loading"),
124
+ );
125
+ match home::home_dir() {
126
+ Some(path) => {
127
+ debug!("{}", path.to_str().unwrap());
128
+ let mut file = OpenOptions::new()
129
+ .create(true)
130
+ .truncate(true)
131
+ .write(true)
132
+ .open([path.to_str().unwrap(), "/.smb/config.json"].join(""))?;
133
+ let json = serde_json::to_string(&config)?;
134
+ file.write_all(json.as_bytes())?;
135
+
136
+ Ok(CommandResult {
137
+ spinner,
138
+ symbol: succeed_symbol(),
139
+ msg: succeed_message("Use project successful."),
140
+ })
141
+ }
142
+ None => {
143
+ let error = anyhow!("Failed to get home directory.");
144
+ Err(error)
145
+ }
146
+ }
147
+}
crates/cli/src/project/mod.rs
+3
-43
@@ -10,18 +10,12 @@ use crate::{
10
project::{
11
crud_create::process_project_init,
12
crud_delete::process_project_delete,
13
- crud_read::{process_project_list, process_project_show},
13
+ crud_read::{process_project_list, process_project_show, process_project_use},
14
deployment::process_deployment,
15
},
16
- ui::{succeed_message, succeed_symbol},
16
};
18
-use anyhow::{anyhow, Result};
19
-use log::debug;
20
-use smbcloud_model::project::Config;
17
+use anyhow::Result;
18
use smbcloud_networking::environment::Environment;
22
-use smbcloud_networking_project::crud_project_deployment_read::get_project;
23
-use spinners::Spinner;
24
-use std::{fs::OpenOptions, io::Write};
19
20
pub async fn process_project(env: Environment, commands: Commands) -> Result<CommandResult> {
21
match commands {
@@ -29,41 +23,7 @@ pub async fn process_project(env: Environment, commands: Commands) -> Result<Com
23
Commands::List {} => process_project_list(env).await,
24
Commands::Show { id } => process_project_show(env, id).await,
25
Commands::Delete { id } => process_project_delete(env, id).await,
32
- Commands::Use { id } => {
33
- let project = get_project(env,"access token".to_owned(), 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
- }
26
+ Commands::Use { id } => { process_project_use(env, id).await }
27
Commands::Deployment { id } => process_deployment(env, id).await,
28
}
29
}