2 files changed
+42
-32
src/login/process.rs
+1
-1
@@ -102,7 +102,7 @@ pub async fn process_login(args: LoginArgs) -> Result<()> {
102
}
103
}
104
_ => {
105
- let error = anyhow!("Failed to log in. Check your username and password.");
105
+ let error = anyhow!("Connection error. Check your username and password.");
106
return Err(error);
107
}
108
}
src/main.rs
+41
-31
@@ -47,7 +47,10 @@ fn setup_logging(level: Option<EnvFilter>) -> Result<()> {
47
#[tokio::main]
48
async fn main() {
49
match run().await {
50
- Ok(_) => {}
50
+ Ok(result) => {
51
+ let mut spinner = result.spinner;
52
+ spinner.stop_and_persist(&result.symbol, result.msg);
53
+ }
54
Err(e) => {
55
println!("\n{} {}", ERROR_EMOJI, style(e).red());
56
std::process::exit(1);
@@ -55,10 +58,16 @@ async fn main() {
58
}
59
}
60
58
-async fn run() -> Result<()> {
61
+struct CommandResult {
62
+ spinner: Spinner,
63
+ symbol: String,
64
+ msg: String,
65
+}
66
+
67
+async fn run() -> Result<CommandResult> {
68
let cli = Cli::parse();
69
61
- let log_level_error: Result<()> = Err(anyhow!(
70
+ let log_level_error: Result<CommandResult> = Err(anyhow!(
71
"Invalid log level: {:?}.\n Valid levels are: trace, debug, info, warn, and error.",
72
cli.log_level
73
));
@@ -85,22 +94,30 @@ async fn run() -> Result<()> {
94
.interact()
95
.unwrap();
96
88
- let mut spinner = Spinner::new(
97
+ let spinner = Spinner::new(
98
spinners::Spinners::SimpleDotsScrolling,
99
style("Logging in...").green().bold().to_string(),
100
);
92
- let join_handle = tokio::spawn(async move {
93
- let _future = process_login(LoginArgs { username, password }).await;
94
- sleep(Duration::from_millis(5000)).await;
95
- });
101
97
- match join_handle.await {
98
- _ => {}
102
+ match process_login(LoginArgs { username, password }).await {
103
+ Ok(_) => {
104
+ return Ok(CommandResult {
105
+ spinner: spinner,
106
+ symbol: "✅".to_owned(),
107
+ msg: "You are logged in!".to_owned(),
108
+ });
109
+ }
110
+ Err(e) => {
111
+ return Ok(CommandResult {
112
+ spinner: spinner,
113
+ symbol: "❌".to_owned(),
114
+ msg: format!("Failed to login: {}", e),
115
+ });
116
+ }
117
}
100
- spinner.stop_and_persist("✅", style("You are logged in!").green().bold().to_string());
118
}
119
Commands::Signup { username, password } => {
103
- let mut spinner = Spinner::new(
120
+ let spinner = Spinner::new(
121
spinners::Spinners::BouncingBall,
122
style("Signing up...").green().bold().to_string(),
123
);
@@ -110,28 +127,21 @@ async fn run() -> Result<()> {
127
});
128
129
match join_handle.await {
113
- Ok(_) => {}
130
+ Ok(_) => {
131
+ return Ok(CommandResult {
132
+ spinner: spinner,
133
+ symbol: "✅".to_owned(),
134
+ msg: "You are signed up!".to_owned(),
135
+ });
136
+ }
137
Err(e) => {
115
- spinner.stop_and_persist(
116
- "❌",
117
- style(format!("Failed to sign up: {}", e))
118
- .red()
119
- .bold()
120
- .to_string(),
121
- );
122
- return Ok(());
138
+ return Ok(CommandResult {
139
+ spinner: spinner,
140
+ symbol: "❌".to_owned(),
141
+ msg: format!("Failed to signup: {}", e),
142
+ });
143
}
144
}
125
-
126
- spinner.stop_and_persist(
127
- "✅",
128
- style("Your account is created! Check your email to confirm your account.")
129
- .green()
130
- .bold()
131
- .to_string(),
132
- )
145
}
146
}
135
-
136
- Ok(())
147
}