summaryrefslogtreecommitdiffstats
path: root/src/utils/spinner.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-04-21 07:57:02 +0800
committerGitHub <noreply@github.com>2024-04-21 07:57:02 +0800
commitc5506fe39377d864f80175821712b33949241583 (patch)
treeaa910f226cef456ff5a7652a8458c5193a6352de /src/utils/spinner.rs
parentb3162a72b50f88d78ca3d57c1f8b3421cecfe2b4 (diff)
downloadaichat-c5506fe39377d864f80175821712b33949241583.tar.gz
refactor: tell user session compression (#426)
Diffstat (limited to 'src/utils/spinner.rs')
-rw-r--r--src/utils/spinner.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/utils/spinner.rs b/src/utils/spinner.rs
index c684901..3715eff 100644
--- a/src/utils/spinner.rs
+++ b/src/utils/spinner.rs
@@ -1,6 +1,11 @@
use anyhow::Result;
use crossterm::{cursor, queue, style, terminal};
-use std::io::{Stdout, Write};
+use std::{
+ io::{stdout, Stdout, Write},
+ sync::mpsc,
+ thread,
+ time::Duration,
+};
pub struct Spinner {
index: usize,
@@ -50,3 +55,18 @@ impl Spinner {
Ok(())
}
}
+
+pub fn run_spinner(message: &str, rx: mpsc::Receiver<()>) -> Result<()> {
+ let mut writer = stdout();
+ let mut spinner = Spinner::new(message);
+ loop {
+ spinner.step(&mut writer)?;
+ if let Ok(()) = rx.try_recv() {
+ spinner.stop(&mut writer)?;
+ break;
+ }
+ thread::sleep(Duration::from_millis(50))
+ }
+ spinner.stop(&mut writer)?;
+ Ok(())
+}