Skip to content

timvisee/took-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build status on GitLab CI Newest release on crates.io Documentation Number of downloads on crates.io Project license

took: easily measure & report elapsed time

I always find measuring and reporting run time of code it in a human readable format troublesome.

This crate provides a few simple interfaces to do just that.

Examples

  • Measure & report manually using Timer stopwatch:

    use took::Timer;
    
    let timer = Timer::new();
    // Run heavy task
    println!("Done! Took {}", timer.took());
    
    // Prints:
    // Done! Took 1.00 s
  • Measure a function, report manually:

    use took::took;
    
    let (took, result) = took(|| {
        // Run heavy task
    });
    println!("Done, took {}", took);
    
    // Prints:
    // Done! Took 1.00 s
  • Measure & report a function automatically using attribute:

    #[macro_use]
    extern crate took_macro;
    
    my_function();
    other_function();
    
    #[took]
    pub fn my_function() {
        // Run heavy task
    }
    
    #[took(description = "Render finished,")]
    pub fn other_function() {
        // Run heavy task
    }
    
    // Prints:
    // my_function() took 1.00 s
    // Render finished, took 1.00 s

Requirements

  • Rust 1.33 or newer (with std)

Usage

Add the dependencies in your Cargo.toml. The took-macro dependency is only required if you'll be using the #[took] attribute macro.

[dependencies]
took = "0.1"
took-macro = "0.1" # if using macros

Import and start using:

use took::{Timer, took};

let timer = Timer::new();
println!("Done! Took {}", timer.took());

let (took, result) = took(|| {
    // Run heavy task
});
println!("Done, took {}", took);

If you'll be using #[took] attribute macro, explicitly import it:

#[macro_use]
extern crate took_macro;

#[took]
pub fn function_one() {}

#[took(description = "Some heavy logic finished,")]
pub fn function_two() {}

TODO

  • Support #[took] attribute for almost anything (function call, blocks, if-statements, ...)
  • Time formatting configurability
  • Use more precise timers
  • Print elapsed time to more than just stderr

License

This project is released under the MIT license. Check out the LICENSE file for more information.