| Crates.io | lazy-attribute |
| lib.rs | lazy-attribute |
| version | 0.1.4 |
| created_at | 2023-10-30 21:44:10.778153+00 |
| updated_at | 2023-11-02 17:22:33.067583+00 |
| description | This crate provides a convenient attribute macro for lazy function execution |
| homepage | |
| repository | https://github.com/zerocore-ai/lazy-attribute |
| max_upload_size | |
| id | 1019065 |
| size | 9,927 |
lazy-attributes provides attribute macros for simplifying working with lazily evaluated functions.
Functions decorated with #[lazy_ref] will only be executed the first time they are called.
On subsequent calls, the cached return value is returned.
With lazy_attribute::lazy_ref, you can annotate a function that you want to lazily evaluate:
use lazy_attribute::lazy_ref;
#[lazy_ref]
fn get_string() -> String {
println!("Called once!");
String::from("Hello, world!")
}
fn main() {
println!("{}", get_string()); // Outputs: Called once! Hello, world!
println!("{}", get_string()); // Outputs: Hello, world!
}
The first time the function is called, it will be evaluated and its result will be cached. Subsequent calls will return the cached result.
lazy_ref macro roughly desugars the get_string function to:
static __lazy_static_get_string: OnceCell<String> = OnceCell::new();
fn get_string() -> &'static String {
__lazy_static_get_string.get_or_init(|| {
println!("Called once!");
String::from("Hello, world!")
})
}
With async feature enabled, lazy_ref can also be used with async functions:
use lazy_attribute::lazy_ref;
#[lazy_ref]
async fn get_string() -> String {
println!("Called once!");
String::from("Hello, world!")
}
#[tokio::main]
async fn main() {
println!("{}", get_string().await); // Outputs: Called once! Hello, world!
println!("{}", get_string().await); // Outputs: Hello, world!
}
lazy_* macros do not support functions with arguments. You will get an error telling you arguments are not supported.async - Enables support for lazily evaluating async functions.