@smbcloud / cli / commits / 99a6025

Add CommandResult

Seto Elkahfi committed Feb 28, 2023 at 22:56 UTC 99a6025048a4fd133df746d23f16e89f6dbcea26
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 }