Skip to content

A lightweight, counting progress-bar for Rust

License

Notifications You must be signed in to change notification settings

KernelFreeze/progressing

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

progressing

Build Status nightly

Tag Crates.io Docs

Changelog Last commit

License

Look and feel

At first, the trait Baring is needed.

use progressing::{
    // The underlying Trait
    Baring,
    // Just handy names for the examples below
    bernoulli::Bar as BernoulliBar,
    clamping::Bar as ClampingBar,
    mapping::Bar as MappingBar,
};

In the following, different use-cases of the provided progress-bars are presented. Note, that the examples below use set(...), but add(...) is supported as well.

  • Printing value 0.3 clamped to [0, 1] prints [=====>------------].

    let mut progress_bar = ClampingBar::new();
    progress_bar.set_len(20);
    progress_bar.set(0.3);
    println!("{}", progress_bar);
  • Printing value 4 mapped from [-9, 5] to [0, 1] prints [================>-] (4 / 5).

    let mut progress_bar = MappingBar::with_range(-9, 5);
    progress_bar.set_len(20);
    progress_bar.set(4);
    println!("{}", progress_bar);
  • Every bar can be used with a simple time-approximation based on the past process. For a process of this duration, this example would print [================>-] (4 / 5) ~ 2 min. The only difference is the call of timed().

    let mut progress_bar = MappingBar::with_range(-9, 5).timed();
    progress_bar.set_len(20);
    progress_bar.set(4);
    println!("{}", progress_bar);
  • In case something should be counted and failures may occur, try this example. When counting 42 successes, where 60 is the goal and 130 attempts have been made, [============>-----] (42 / 60 # 130) is printed. Adding trials may be handier using bools.

    let mut progress_bar = BernoulliBar::from_goal(60);
    progress_bar.set_len(20);
    progress_bar.set((42, 130));
    println!("{}", progress_bar);
    
    let is_successful = true;
    if is_successful {
        // Does increase both 42 and 130
        progress_bar.add(true);
    } else {
        // Does increase 130 only
        progress_bar.add(false);
    }
  • You may change a bar's style by setting it to a string of 5 characters.

    let mut progress_bar = ClampingBar::new();
    progress_bar.set_len(20);
    progress_bar.set(0.3);
    
    // different custom styles are possible
    
    // prints (----->............)
    progress_bar.set_style("(->.)");
    println!("{}", progress_bar);
    
    // prints [#####             ]
    progress_bar.set_style("[#  ]");
    println!("{}", progress_bar);
    
    // prints (#####-------------)
    progress_bar.set_style("(#--)");
    println!("{}", progress_bar);
  • Another typical use-case may be printing some, not every progress in a loop.

    let mut progress_bar = BernoulliBar::with_goal(100).timed();
    progress_bar.set_len(20);
    progress_bar.set(13);
    
    // do the job and show progress
    for _ in 0..100 {
        progress_bar.add(true);
        if progress_bar.has_progressed_significantly() {
            progress_bar.remember_significant_progress();
            println!("{}", progress_bar);
        }
    
        std::thread::sleep(std::time::Duration::from_millis(100));
    }
    println!("{}", progress_bar);

    will print

    [=>................] (10/100) #14 ~8s
    [===>..............] (20/100) #20 ~7s
    [=====>............] (30/100) #30 ~6s
    [=======>..........] (40/100) #40 ~5s
    [=========>........] (50/100) #50 ~4s
    [==========>.......] (60/100) #60 ~3s
    [============>.....] (70/100) #70 ~2s
    [==============>...] (80/100) #80 ~1s
    [================>.] (90/100) #90 ~0s
    [==================] (100/100) #100 ~0s
    [==================] (100/100) #113 ~0s
    

    A line is printed every time when another 10 % of the goal is reached. Please note, that the progress-bar starts with 13 and hence needs 113 attempts in total.

Setup and usage

Just add progressing = '3' to the dependencies in Cargo.toml.

Please refer to the examples for some more examples.

About

A lightweight, counting progress-bar for Rust

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 97.6%
  • Shell 2.4%