Contains some convenient macros to analyze function execution, like count
to know how many times a function was called, trace
to log when entering/exiting from a function and what are its arguments, and cache
for pure functions cache.
| Feature | Description | Additional dependencies |
| ------- | ----------- | ----------------------- |
| count
| Makes available a macro count!
to get how many times a function was called | None |
| trace
| Prints when entering/exiting in a tagged function and its arguments | None |
| cache
| Implements memoization for a tagged function | lazy_static
and hashbrown
|
Just cache
requires that both lazy_static
and hashbrown
are enabled in the target module. When enabled, it also requires that all parameters implement the Debug
trait and Clone
for the return type.
Debug
for parameters and not Clone
?Consider these scenarios: ```rust
fn foo<'a, T>(lhs: &'a T, rhs: &'a T) -> T {
unimplemented!()
}
``
It's hard to create cache storage with generic keys and lifetimes, once it can't be parsed in an equivalent format for a global
RwLock`.
Furthermore, it allows some optimizations for liked types: ```rust
fn foo
trace
/count
/cache
in my release builds. How do I disable it?There isn't ~yet~ a good way to enable/disable specific features in different profiles. You'll need to set default-features
to false
and define which features you want. E.g:
toml
[dependencies]
moneta_fn = { version = "*", default-features = false, features = ["cache", "count", "time"] }
trace
/count
/cache
for just one function?Set trace
/count
/cache
as force
/forbid
```rust
fn foo(a: u8) -> u8 { unimplemented!() } ```
count!
/get_cache!
calls break when the count
/cache
feature is disabled?No. The counting or cache will just not be updated.