Crate throbber[][src]

Crates.io docs.rs GitHub last commit License

This crate serves as an alternative to loading. It is used to display a throbber animation in the terminal while other calculations are done in the main program.

Throbber Preview

Usage

Add this to your Cargo.toml:

[dependencies]
throbber = "0.1"

To display a throbber animation, first create a Throbber object:

let mut throbber = Throbber::new();

You can also customize certain settings like the displayed animation and the displayed message:

let mut throbber = Throbber::new()
    .message("calculating stuff".to_string())
    .frames(&throbber::MOVE_EQ_F); // this crate comes with a few predefined animations
                                   // see the Constants section

Then you can simply call start wherever you want to start the animation and a finish function like success where you want to stop it.

throbber.start();
// do calculations
throbber.success("calculations successful!".to_string());

After which you can call start or start_with_msg again to start the animation again. You can also change everything you could customize during the Throbber object creation, e. g. with change_message and change_frames. This also works while an animation is running.

If you don’t intend to start another animation, you should drop the Throbber object with end. This action also ends the underlying thread:

throbber.end();

Examples

This is the example from the preview above:

use std::thread;
use std::time::Duration;
use throbber::Throbber;

fn main() {
    let mut throbber = Throbber::new().message("calculating stuff".to_string());

    throbber.start();
    // do stuff
    thread::sleep(Duration::from_secs(2));
    throbber.success("Success".to_string());

    throbber.start_with_msg("calculating more stuff".to_string());
    // do other stuff
    thread::sleep(Duration::from_secs(2));
    throbber.fail("Fail".to_string());

    throbber.end();
}

You can also keep track of progress with change_message:

use std::thread;
use std::time::Duration;
use throbber::Throbber;

fn main() {
    let mut throbber = Throbber::new()
        .message("Downloading file1 0%".to_string())
        .frames(&throbber::ROTATE_F)
        .interval(Duration::from_millis(100));

    throbber.start();
    for i in 0..100 {
        throbber.change_message(format!("Downloading file1 {}%", i));
        thread::sleep(Duration::from_millis(30));
    }
    throbber.success("Downloaded file1".to_string());

    throbber.start_with_msg("Downloading file2 0%".to_string());
    for i in 0..69 {
        throbber.change_message(format!("Downloading file2 {}%", i));
        thread::sleep(Duration::from_millis(30));
    }
    throbber.fail("Download of file2 failed".to_string());

    throbber.end();
}

Structs

Throbber

Representation of a throbber animation. It can start, succeed, fail or end at any point.

Constants

CIRCLE_F

◐ ◓ ◑ ◒

DEFAULT_F

⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏

MOVE_EQ_F

[= ] [ = ] [ =] [ = ]

MOVE_EQ_LONG_F

[= ] [== ] [ == ] [ == ] [ ==] [ =]

MOVE_MIN_F

[- ] [ - ] [ -] [ - ]

MOVE_MIN_LONG_F

[- ] [-- ] [ -- ] [ -- ] [ --] [ -]

ROTATE_F

| / - \