| use std::time::Duration; |
| |
| use indicatif::ProgressBar; |
| use tokio::runtime; |
| use tokio::time::interval; |
| |
| fn main() { |
| // Plain progress bar, totaling 1024 steps. |
| let steps = 1024; |
| let pb = ProgressBar::new(steps); |
| |
| // Stream of events, triggering every 5ms. |
| let rt = runtime::Builder::new_current_thread() |
| .enable_time() |
| .build() |
| .expect("failed to create runtime"); |
| |
| // Future computation which runs for `steps` interval events, |
| // incrementing one step of the progress bar each time. |
| let future = async { |
| let mut intv = interval(Duration::from_millis(5)); |
| |
| for _ in 0..steps { |
| intv.tick().await; |
| pb.inc(1); |
| } |
| }; |
| |
| // Drive the future to completion, blocking until done. |
| rt.block_on(future); |
| |
| // Mark the progress bar as finished. |
| pb.finish(); |
| } |