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
|
| visible
| Changes the cache storage and counter visibility | None |
Each feature can be forbided, forced or setted to global config (setted by features) in the attribute declaration. E.g: ```rust
fn foo(a: u8) -> u8 { unimplemented!() } ```
cache
requires that both lazy_static
and hashbrown
are enabled in the target module. When enabled in a function, 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"] }
Another way to do it, is using a setting a default feature. ```toml [dependencies] moneta_fn = { version = "*", default-features = false, features = ["cache", "count", "time"] }
[features] default = ["debugmode"] debugmode = ["moneta_fn/trace"] ```
And when compiling with a profile relase, use --no-default-features
bash
cargo build --release --no-default-features
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.