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