https://github.com/timvisee/took-rs
:watch: Easily measure & report elapsed time in Rust. https://gitlab.com/timvisee/took-rs
https://github.com/timvisee/took-rs
elapsed-time hacktoberfest rust rust-library stopwatch-library time
Last synced: 2 months ago
JSON representation
:watch: Easily measure & report elapsed time in Rust. https://gitlab.com/timvisee/took-rs
- Host: GitHub
- URL: https://github.com/timvisee/took-rs
- Owner: timvisee
- License: mit
- Created: 2019-09-30T19:40:43.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-03-18T18:52:18.000Z (about 5 years ago)
- Last Synced: 2025-01-15T10:07:45.774Z (4 months ago)
- Topics: elapsed-time, hacktoberfest, rust, rust-library, stopwatch-library, time
- Language: Rust
- Homepage:
- Size: 33.2 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[![Build status on GitLab CI][gitlab-ci-master-badge]][gitlab-ci-link]
[![Newest release on crates.io][crate-version-badge]][crate-link]
[![Documentation][docs-badge]][docs]
[![Number of downloads on crates.io][crate-download-badge]][crate-link]
[![Project license][crate-license-badge]](LICENSE)[crate-download-badge]: https://img.shields.io/crates/d/took.svg
[crate-license-badge]: https://img.shields.io/crates/l/took.svg
[crate-link]: https://crates.io/crates/took
[crate-version-badge]: https://img.shields.io/crates/v/took.svg
[docs-badge]: https://docs.rs/took/badge.svg
[docs]: https://docs.rs/took
[gitlab-ci-link]: https://gitlab.com/timvisee/took-rs/pipelines
[gitlab-ci-master-badge]: https://gitlab.com/timvisee/took-rs/badges/master/pipeline.svg# `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:```rust
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:
```rust
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:
```rust
#[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.```Cargo.toml
[dependencies]
took = "0.1"
took-macro = "0.1" # if using macros
```Import and start using:
```rust
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:
```rust
#[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](LICENSE) file for more information.