Attribute Macro lazy_attribute::lazy_ref

source ·
#[lazy_ref]
Expand description

Functions decorated with #[lazy_ref] will only be executed the first time they are called. On subsequent calls, the cached return value is immediately returned.

This is useful for avoiding repeating expensive computations or operations.

The first call to a lazy_ref function creates initializes a shared variable with a 'static lifetime, allowing it to live for the entire duration of the program.

Example

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!
}

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!
}