@smbcloud / cli / commits / 068ceba

cleanup

Seto Elkahfi committed May 31, 2025 at 17:08 UTC 068ceba844141371bcb21fcd0ee8dcd1f522aaf4
10 files changed +43 -54
Cargo.toml
+2 -2
@@ -33,6 +33,8 @@ smbcloud-networking = { version = "0.3", path = "crates/smbcloud-networking" }
33 smbcloud-networking-project = { version = "0.3.0", path = "crates/smbcloud-networking-project" }
34 smbcloud-utils = { version = "0.3.0", path = "crates/smbcloud-utils" }
35 spinners = "4.1.0"
36 +strum = "0.27"
37 +strum_macros = "0.27"
38 tabled = "0.19"
39 thiserror = "2.0"
40 tokio = "1.44"
@@ -42,5 +44,3 @@ tracing-bunyan-formatter = "0.3.3"
44 tracing-subscriber = "0.3.14"
45 url = "2"
46 url-builder = "0.1.1"
45 -strum = "0.27"
46 -strum_macros = "0.27"
crates/cli/src/deploy/config.rs
+4 -6
@@ -55,14 +55,14 @@ fn handle_config_error() -> Result<Config, ConfigError> {
55
56 pub(crate) async fn check_project(
57 env: Environment,
58 - access_token: String,
59 - id: i32
58 + access_token: &str,
59 + id: i32,
60 ) -> Result<(), ConfigError> {
61 let mut spinner: Spinner = Spinner::new(
62 spinners::Spinners::Hamburger,
63 succeed_message("Validate project"),
64 );
65 - match get_project(env, access_token, id.to_string()).await {
65 + match get_project(env, access_token.to_string(), id.to_string()).await {
66 Ok(_) => {
67 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Valid project"));
68 Ok(())
@@ -94,9 +94,7 @@ impl Config {
94 fn ssh_key_path(&self, user_id: i32) -> String {
95 // Use the dirs crate to get the home directory
96 let home = dirs::home_dir().expect("Could not determine home directory");
97 - let key_path = home
98 - .join(".ssh")
99 - .join(format!("id_{}@smbcloud", user_id));
97 + let key_path = home.join(".ssh").join(format!("id_{}@smbcloud", user_id));
98 let key_path_str = key_path.to_string_lossy().to_string();
99 println!("Use key path: {}", key_path_str);
100 key_path_str
crates/cli/src/deploy/mod.rs
+1 -1
@@ -33,7 +33,7 @@ pub async fn process_deploy(env: Environment) -> Result<CommandResult> {
33 let config = check_config(env).await?;
34
35 // Validate config with project.
36 - check_project(env, access_token, config.project.id).await?;
36 + check_project(env, &access_token, config.project.id).await?;
37
38 // Check remote repository setup.
39 let repo = match Repository::open(".") {
crates/cli/src/project/deployment.rs
+5 -6
@@ -6,9 +6,7 @@ use crate::{
6 use anyhow::Result;
7 use smbcloud_model::project::Deployment;
8 use smbcloud_networking::{environment::Environment, get_smb_token};
9 -use smbcloud_networking_project::crud_project_deployment_read::{
10 - get_deployment_detail, list_deployments,
11 -};
9 +use smbcloud_networking_project::crud_project_deployment_read::{get_deployment, get_deployments};
10 use spinners::Spinner;
11 use tabled::{Table, Tabled};
12
@@ -23,18 +21,19 @@ pub(crate) async fn process_deployment(
21
22 let access_token = get_smb_token(env).await?;
23
26 - check_project(env,access_token, config.project.id).await?;
24 + check_project(env, &access_token, config.project.id).await?;
25
26 if let Some(deployment_id) = id {
27 // Show detail for a specific deployment
28 let deployment_id: i32 = deployment_id.parse()?;
31 - let deployment = get_deployment_detail(env, config.project.id, deployment_id).await?;
29 + let deployment =
30 + get_deployment(env, access_token, config.project.id, deployment_id).await?;
31 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded"));
32 show_deployment_detail(&deployment);
33 } else {
34 // List all deployments for the project
35 let access_token = get_smb_token(env).await?;
37 - let deployments = list_deployments(env, access_token, config.project.id).await?;
36 + let deployments = get_deployments(env, access_token, config.project.id).await?;
37 spinner.stop_and_persist(&succeed_symbol(), succeed_message("Load all deployments"));
38 show_project_deployments(&deployments);
39 };
crates/cli/src/project/mod.rs
+1 -1
@@ -23,7 +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,
26 - Commands::Use { id } => { process_project_use(env, id).await }
26 + Commands::Use { id } => process_project_use(env, id).await,
27 Commands::Deployment { id } => process_deployment(env, id).await,
28 }
29 }
crates/smbcloud-model/src/error_codes.rs
+5 -5
@@ -31,13 +31,13 @@ impl Display for ErrorResponse {
31 pub enum ErrorCode {
32 #[error("Unknown error.")]
33 Unknown = 0,
34 - #[error("Parse error.")]
34 + #[error("Parse error.")]
35 ParseError = 1,
36 - #[error("Network error.")]
36 + #[error("Network error.")]
37 NetworkError = 2,
38 // Projects
39 - #[error("Project not found.")]
40 - ProjectNotFound = 1000
39 + #[error("Project not found.")]
40 + ProjectNotFound = 1000,
41 }
42
43 impl ErrorCode {
@@ -64,7 +64,7 @@ impl ErrorCode {
64 ErrorCode::NetworkError => "Network error.",
65 }
66 }
67 -
67 +
68 pub fn rb_constant_name(&self) -> String {
69 self.to_string()
70 }
crates/smbcloud-model/src/lib.rs
+1 -1
@@ -1,10 +1,10 @@
1 pub mod account;
2 pub mod app_auth;
3 +pub mod error_codes;
4 pub mod forgot;
5 pub mod login;
6 pub mod project;
7 pub mod signup;
7 -pub mod error_codes;
8
9 pub mod ar_date_format {
10 use chrono::{DateTime, Utc};
crates/smbcloud-networking-project/src/crud_project_deployment_read.rs
+22 -28
@@ -1,55 +1,49 @@
1 use crate::{build_project_deployment, build_project_deployment_index, build_project_url_with_id};
2 -use anyhow::{anyhow, Result};
2 +use anyhow::Result;
3 use reqwest::Client;
4 -use smbcloud_model::{error_codes::ErrorResponse, project::{Deployment, Project}};
5 -use smbcloud_networking::{constants::SMB_USER_AGENT, environment::Environment, get_smb_token, network::request};
4 +use smbcloud_model::{
5 + error_codes::ErrorResponse,
6 + project::{Deployment, Project},
7 +};
8 +use smbcloud_networking::{constants::SMB_USER_AGENT, environment::Environment, network::request};
9
7 -pub async fn list_deployments(
10 +pub async fn get_deployments(
11 env: Environment,
12 access_token: String,
10 - project_id: i32
13 + project_id: i32,
14 ) -> Result<Vec<Deployment>, ErrorResponse> {
15 let builder = Client::new()
16 .get(build_project_deployment_index(env, project_id.to_string()))
17 .header("Authorization", access_token)
18 .header("User-agent", SMB_USER_AGENT);
16 -
19 request(builder).await
20 }
21
20 -pub async fn get_deployment_detail(
22 +pub async fn get_deployment(
23 env: Environment,
24 + access_token: String,
25 project_id: i32,
26 deployment_id: i32,
24 -) -> Result<Deployment> {
25 - let token = get_smb_token(env).await?;
26 -
27 - let url = build_project_deployment(env, project_id.to_string(), deployment_id.to_string());
28 -
29 - let response = Client::new()
30 - .get(url)
31 - .header("Authorization", token)
32 - .header("User-agent", "smbcloud-cli")
33 - .send()
34 - .await?;
35 -
36 - match response.status() {
37 - reqwest::StatusCode::OK => {
38 - let deployment: Deployment = response.json().await?;
39 - Ok(deployment)
40 - }
41 - _ => Err(anyhow!("Failed to get deployment detail.")),
42 - }
27 +) -> Result<Deployment, ErrorResponse> {
28 + let builder = Client::new()
29 + .get(build_project_deployment(
30 + env,
31 + project_id.to_string(),
32 + deployment_id.to_string(),
33 + ))
34 + .header("Authorization", access_token)
35 + .header("User-agent", SMB_USER_AGENT);
36 + request(builder).await
37 }
38
39 pub async fn get_project(
40 env: Environment,
41 access_token: String,
48 - id: String
42 + id: String,
43 ) -> Result<Project, ErrorResponse> {
44 let builder: reqwest::RequestBuilder = Client::new()
45 .get(build_project_url_with_id(env, id))
46 .header("Authorization", access_token)
47 .header("User-agent", SMB_USER_AGENT);
48 request(builder).await
55 -}
\ No newline at end of file
49 +}
crates/smbcloud-networking-project/src/lib.rs
+1 -3
@@ -4,9 +4,7 @@ pub mod crud_project_deployment_read;
4 use anyhow::{anyhow, Result};
5 use log::debug;
6 use reqwest::{Client, StatusCode};
7 -use smbcloud_model::
8 - project::{Project, ProjectCreate}
9 -;
7 +use smbcloud_model::project::{Project, ProjectCreate};
8 use smbcloud_networking::{environment::Environment, get_smb_token, smb_base_url_builder};
9
10 pub async fn get_all(env: Environment) -> Result<Vec<Project>> {
crates/smbcloud-networking/src/network.rs
+1 -1
@@ -38,7 +38,7 @@ pub async fn parse_error_response<T: DeserializeOwned>(
38 }
39 };
40 error!("Error response: {:?}", e);
41 - return Err(e);
41 + Err(e)
42 }
43
44 pub async fn request<R: DeserializeOwned>(builder: RequestBuilder) -> Result<R, ErrorResponse> {