@smbcloud / cli / commits / 54e6fae

Use spinners

Seto Elkahfi committed Feb 20, 2023 at 18:44 UTC 54e6fae7736568a64b61b63eda6e62d3ffd58057
3 files changed +63 -7
Cargo.lock
+46
@@ -498,6 +498,12 @@ dependencies = [
498 "cfg-if",
499 ]
500
501 +[[package]]
502 +name = "maplit"
503 +version = "1.0.2"
504 +source = "registry+https://github.com/rust-lang/crates.io-index"
505 +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
506 +
507 [[package]]
508 name = "matchers"
509 version = "0.1.0"
@@ -814,6 +820,12 @@ dependencies = [
820 "windows-sys 0.45.0",
821 ]
822
823 +[[package]]
824 +name = "rustversion"
825 +version = "1.0.11"
826 +source = "registry+https://github.com/rust-lang/crates.io-index"
827 +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
828 +
829 [[package]]
830 name = "ryu"
831 version = "1.0.12"
@@ -945,6 +957,7 @@ dependencies = [
957 "reqwest",
958 "serde",
959 "serde_json",
960 + "spinners",
961 "tokio",
962 "tracing",
963 "tracing-bunyan-formatter",
@@ -961,12 +974,45 @@ dependencies = [
974 "winapi",
975 ]
976
977 +[[package]]
978 +name = "spinners"
979 +version = "4.1.0"
980 +source = "registry+https://github.com/rust-lang/crates.io-index"
981 +checksum = "08615eea740067d9899969bc2891c68a19c315cb1f66640af9a9ecb91b13bcab"
982 +dependencies = [
983 + "lazy_static",
984 + "maplit",
985 + "strum",
986 +]
987 +
988 [[package]]
989 name = "strsim"
990 version = "0.10.0"
991 source = "registry+https://github.com/rust-lang/crates.io-index"
992 checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
993
994 +[[package]]
995 +name = "strum"
996 +version = "0.24.1"
997 +source = "registry+https://github.com/rust-lang/crates.io-index"
998 +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
999 +dependencies = [
1000 + "strum_macros",
1001 +]
1002 +
1003 +[[package]]
1004 +name = "strum_macros"
1005 +version = "0.24.3"
1006 +source = "registry+https://github.com/rust-lang/crates.io-index"
1007 +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
1008 +dependencies = [
1009 + "heck",
1010 + "proc-macro2",
1011 + "quote",
1012 + "rustversion",
1013 + "syn",
1014 +]
1015 +
1016 [[package]]
1017 name = "syn"
1018 version = "1.0.107"
Cargo.toml
+1
@@ -21,6 +21,7 @@ home = "0.5.4"
21 reqwest = { version = "0.11", features = ["json"] }
22 serde = { version = "1", features = ["derive"] }
23 serde_json = "1.0.82"
24 +spinners = "4.1.0"
25 tokio = { version = "1.14.1", features = ["full"] }
26 tracing = { version = "0.1.35", features = ["log"] }
27 tracing-bunyan-formatter = "0.3.3"
src/main.rs
+16 -7
@@ -1,13 +1,15 @@
1 -use std::{fs::OpenOptions, path::PathBuf, str::FromStr};
1 +use std::{fs::OpenOptions, path::PathBuf, str::FromStr, time::Duration};
2
3 use anyhow::{anyhow, Result};
4 use clap::Parser;
5 use console::style;
6 use smbpndk_cli::{
7 cli::{Cli, Commands},
8 - constants::{ERROR_EMOJI, OK_EMOJI},
8 + constants::ERROR_EMOJI,
9 login::{process_login, LoginArgs},
10 };
11 +use spinners::Spinner;
12 +use tokio::time::sleep;
13 use tracing::subscriber::set_global_default;
14 use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
15 use tracing_subscriber::{filter::LevelFilter, prelude::*, EnvFilter};
@@ -43,9 +45,7 @@ fn setup_logging(level: Option<EnvFilter>) -> Result<()> {
45 #[tokio::main]
46 async fn main() {
47 match run().await {
46 - Ok(_) => {
47 - println!("\n{} {}", OK_EMOJI, style("Command successful.").green());
48 - }
48 + Ok(_) => {}
49 Err(e) => {
50 println!("\n{} {}", ERROR_EMOJI, style(e).red());
51 std::process::exit(1);
@@ -73,8 +73,17 @@ async fn run() -> Result<()> {
73
74 match cli.command {
75 Commands::Login { username, password } => {
76 - println!("Login: {}, {}", username, password);
77 - process_login(LoginArgs { username, password }).await?;
76 + let mut spinner = Spinner::new(
77 + spinners::Spinners::SimpleDotsScrolling,
78 + style("Logging in...").green().bold().to_string(),
79 + );
80 + let join_handle = tokio::spawn(async move {
81 + let _future = process_login(LoginArgs { username, password }).await;
82 + sleep(Duration::from_millis(5000)).await;
83 + });
84 +
85 + join_handle.await?;
86 + spinner.stop_and_persist("✅", style("You are logged in!").green().bold().to_string())
87 }
88 }
89