3 files changed
+21
-12
crates/cli/src/project/crud_update.rs
+15
-7
@@ -1,9 +1,10 @@
1
use crate::token::{get_smb_token::get_smb_token, is_logged_in::is_logged_in};
2
use anyhow::{anyhow, Result};
3
-use dialoguer::{theme::ColorfulTheme, Input};
3
+use dialoguer::{console::Term, theme::ColorfulTheme, Input, Select};
4
+use smbcloud_model::runner::Runner;
5
use smbcloud_network::environment::Environment;
6
use smbcloud_networking_project::{
6
- crud_project_read::get_project, crud_project_update::update_project_description,
7
+ crud_project_read::get_project, crud_project_update::update_project,
8
};
9
use spinners::Spinner;
10
@@ -13,10 +14,7 @@ use crate::{
14
ui::{description, succeed_message, succeed_symbol},
15
};
16
16
-pub async fn process_project_update_description(
17
- env: Environment,
18
- project_id: String,
19
-) -> Result<CommandResult> {
17
+pub async fn process_project_update(env: Environment, project_id: String) -> Result<CommandResult> {
18
// Check credentials.
19
let is_logged_in = is_logged_in(env).await?;
20
if !is_logged_in {
@@ -29,6 +27,7 @@ pub async fn process_project_update_description(
27
if let Some(project_description) = project.description {
28
println!("Description: {}", description(&project_description));
29
}
30
+ println!("Runner: {}", project.runner);
31
32
// Prompt for new description
33
let new_description = match Input::<String>::with_theme(&ColorfulTheme::default())
@@ -38,11 +37,20 @@ pub async fn process_project_update_description(
37
Ok(desc) => desc,
38
Err(_) => return Err(anyhow!("Invalid description.")),
39
};
40
+
41
+ let runners = vec![Runner::NodeJs, Runner::Swift, Runner::Ruby];
42
+ let runner = Select::with_theme(&ColorfulTheme::default())
43
+ .items(&runners)
44
+ .default(0)
45
+ .interact_on_opt(&Term::stderr())
46
+ .map(|i| runners[i.unwrap()])
47
+ .unwrap();
48
+
49
let spinner = Spinner::new(
50
spinners::Spinners::SimpleDotsScrolling,
51
succeed_message("Loading"),
52
);
45
- update_project_description(env, access_token, project_id, &new_description).await?;
53
+ update_project(env, access_token, project_id, &new_description, runner).await?;
54
Ok(CommandResult {
55
spinner,
56
symbol: succeed_symbol(),
crates/cli/src/project/process.rs
+2
-2
@@ -5,7 +5,7 @@ use crate::{
5
crud_create::process_project_init,
6
crud_delete::process_project_delete,
7
crud_read::{process_project_list, process_project_show, process_project_use},
8
- crud_update::process_project_update_description,
8
+ crud_update::process_project_update,
9
deployment::process_deployment,
10
},
11
};
@@ -20,6 +20,6 @@ pub async fn process_project(env: Environment, commands: Commands) -> Result<Com
20
Commands::Delete { id } => process_project_delete(env, id).await,
21
Commands::Use { id } => process_project_use(env, id).await,
22
Commands::Deployment { id } => process_deployment(env, id).await,
23
- Commands::Update { id } => process_project_update_description(env, id).await,
23
+ Commands::Update { id } => process_project_update(env, id).await,
24
}
25
}
crates/smbcloud-networking-project/src/crud_project_update.rs
+4
-3
@@ -1,14 +1,15 @@
1
use crate::url_builder::build_project_url_with_id;
2
use reqwest::Client;
3
-use smbcloud_model::{error_codes::ErrorResponse, project::Project};
3
+use smbcloud_model::{error_codes::ErrorResponse, project::Project, runner::Runner};
4
use smbcloud_network::{environment::Environment, network::request};
5
use smbcloud_networking::constants::SMB_USER_AGENT;
6
7
-pub async fn update_project_description(
7
+pub async fn update_project(
8
env: Environment,
9
access_token: String,
10
project_id: String,
11
new_description: &str,
12
+ runner: Runner,
13
) -> Result<Project, ErrorResponse> {
14
// PATCH is correct for partial update of description
15
let url = build_project_url_with_id(env, project_id.to_string());
@@ -16,6 +17,6 @@ pub async fn update_project_description(
17
.patch(url)
18
.header("Authorization", access_token)
19
.header("User-agent", SMB_USER_AGENT)
19
- .json(&serde_json::json!({ "description": new_description }));
20
+ .json(&serde_json::json!({ "description": new_description, "runner": runner }));
21
request(builder).await
22
}