diff options
| author | sigoden <sigoden@gmail.com> | 2024-04-21 07:57:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-21 07:57:02 +0800 |
| commit | c5506fe39377d864f80175821712b33949241583 (patch) | |
| tree | aa910f226cef456ff5a7652a8458c5193a6352de /src/utils/spinner.rs | |
| parent | b3162a72b50f88d78ca3d57c1f8b3421cecfe2b4 (diff) | |
| download | aichat-c5506fe39377d864f80175821712b33949241583.tar.gz | |
refactor: tell user session compression (#426)
Diffstat (limited to 'src/utils/spinner.rs')
| -rw-r--r-- | src/utils/spinner.rs | 22 |
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(()) +} |
