summaryrefslogtreecommitdiffstats
path: root/vendor/indicatif/examples/tokio.rs
blob: 17ac2b1fffd4e8de11913cc93a9935f2bb97d5fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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();
}