@smbcloud / cli / commits / a7fc7c2

cleanup

Seto Elkahfi committed May 28, 2025 at 19:38 UTC a7fc7c297fef7ac27e1927ebf14828f6a4b08def
2 files changed +32 -66
crates/cli/src/project/crud_read.rs
+28 -2
@@ -2,10 +2,10 @@ use crate::{
2 cli::CommandResult,
3 ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
4 };
5 -use anyhow::Result;
5 +use anyhow::{anyhow, Result};
6 use smbcloud_model::project::Project;
7 use smbcloud_networking::environment::Environment;
8 -use smbcloud_networking_project::get_all;
8 +use smbcloud_networking_project::{get_all, get_project};
9 use spinners::Spinner;
10 use tabled::{Table, Tabled};
11
@@ -58,6 +58,32 @@ pub async fn process_project_list(env: Environment) -> Result<CommandResult> {
58 }
59 }
60
61 +pub async fn process_project_show(env: Environment, id: String) -> Result<CommandResult> {
62 + let mut spinner = Spinner::new(
63 + spinners::Spinners::SimpleDotsScrolling,
64 + succeed_message("Loading"),
65 + );
66 + match get_project(env, id).await {
67 + Ok(project) => {
68 + spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
69 + let message = succeed_message(&format!("Showing project {}.", &project.name));
70 + show_projects(vec![project]);
71 + Ok(CommandResult {
72 + spinner: Spinner::new(
73 + spinners::Spinners::SimpleDotsScrolling,
74 + succeed_message("Loading"),
75 + ),
76 + symbol: succeed_symbol(),
77 + msg: message,
78 + })
79 + }
80 + Err(e) => {
81 + spinner.stop_and_persist(&fail_symbol(), fail_message("Failed."));
82 + Err(anyhow!("{e}"))
83 + }
84 + }
85 +}
86 +
87 pub(crate) fn show_projects(projects: Vec<Project>) {
88 if projects.is_empty() {
89 return;
crates/cli/src/project/mod.rs
+4 -64
@@ -8,63 +8,23 @@ use crate::{
8 cli::CommandResult,
9 project::crud_create::process_project_init,
10 project::crud_delete::process_project_delete,
11 - project::crud_read::process_project_list,
12 - ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
11 + project::crud_read::{process_project_list, process_project_show},
12 + ui::{succeed_message, succeed_symbol},
13 };
14 use anyhow::{anyhow, Result};
15 use log::debug;
16 -use smbcloud_model::project::{Config, Project};
16 +use smbcloud_model::project::Config;
17 use smbcloud_networking::environment::Environment;
18 use smbcloud_networking_project::get_project;
19 use spinners::Spinner;
20 use std::{fs::OpenOptions, io::Write};
21 -use tabled::{Table, Tabled};
22 -
23 -#[derive(Tabled)]
24 -struct ProjectRow {
25 - #[tabled(rename = "ID")]
26 - id: i32,
27 - #[tabled(rename = "Name")]
28 - name: String,
29 - #[tabled(rename = "Description")]
30 - description: String,
31 - #[tabled(rename = "Created at")]
32 - created_at: String,
33 - #[tabled(rename = "Updated at")]
34 - updated_at: String,
35 -}
21
22 pub async fn process_project(env: Environment, commands: Commands) -> Result<CommandResult> {
23 match commands {
24 Commands::New {} => process_project_init(env).await,
25 Commands::List {} => process_project_list(env).await,
26 + Commands::Show { id } => process_project_show(env, id).await,
27 Commands::Delete { id } => process_project_delete(env, id).await,
42 - Commands::Show { id } => {
43 - let mut spinner = Spinner::new(
44 - spinners::Spinners::SimpleDotsScrolling,
45 - succeed_message("Loading"),
46 - );
47 - // Get Detail
48 - match get_project(env, id).await {
49 - Ok(project) => {
50 - spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
51 - let message = succeed_message(&format!("Showing project {}.", &project.name));
52 - show_projects(vec![project]);
53 - Ok(CommandResult {
54 - spinner: Spinner::new(
55 - spinners::Spinners::SimpleDotsScrolling,
56 - succeed_message("Loading"),
57 - ),
58 - symbol: succeed_symbol(),
59 - msg: message,
60 - })
61 - }
62 - Err(e) => {
63 - spinner.stop_and_persist(&fail_symbol(), fail_message("Failed."));
64 - Err(anyhow!("{e}"))
65 - }
66 - }
67 - }
28 Commands::Use { id } => {
29 let project = get_project(env, id).await?;
30
@@ -102,23 +62,3 @@ pub async fn process_project(env: Environment, commands: Commands) -> Result<Com
62 }
63 }
64 }
105 -
106 -// Private functions
107 -
108 -fn show_projects(projects: Vec<Project>) {
109 - if projects.is_empty() {
110 - return;
111 - }
112 - let rows: Vec<ProjectRow> = projects
113 - .into_iter()
114 - .map(|p| ProjectRow {
115 - id: p.id,
116 - name: p.name,
117 - description: p.description,
118 - created_at: p.created_at.date_naive().to_string(),
119 - updated_at: p.updated_at.date_naive().to_string(),
120 - })
121 - .collect();
122 - let table = Table::new(rows);
123 - println!("{table}");
124 -}