fun_time is a simple Rust library that allows you to easily time your function calls with a simple attribute!
#[fun_time(message = "Heavy calculations on: {a_value}")]
fn some_cool_function(a_value: String) -> usize {
a_value.len()
}
fn main() {
let my_value_length = some_cool_function(String::from("Hello, world."));
}
The above will print Starting: Heavy calculations on: Hello, world.
when the function starts, and Heavy calculations on: Hello, world.: Done in <duration>
on completion.
There are various attributes that allow you to configure the behavior of the fun_time
attribute.
message
allows you to set a message that will be printed when starting, and when done, the message is passed directly to theformat!
macro, so the arguments to the function can be used in the message (provided they haveDebug
orDisplay
).when
allows you to configure when the timing should be collected. The possible values for this are:"always"
which as the name might suggest will always collect timing information, and"debug"
which will only collect whencfg!(debug_assertions)
evaluates totrue
.give_back
is a flag that makes it so the wrapped function will now return the elapsed time instead of printing it. For this it modifies the return type from for example:-> &'a str
to-> (&'a str, std::time::Duration)
. This allows you to handle printing or storing the timing information.reporting
(can not be used in combination with give_back) determines how the reporting is done. The possible options are:"println"
which will print to stdout usingprintln!
. The"log"
option is only available when thelog
feature is used. This will use the log crate withinfo!
level logs by default, this can be affected by thelevel
option.level
Set the level for the log messages, can by any option that can be parsed by thelog::Level
enum.
The reported messages are formatted as follows:
Start message: "Starting: YOUR_MESSAGE_HERE"
Done message: "YOUR_MESSAGE_HERE: Done in DURATION"