lazy-attribute-core

Crates.iolazy-attribute-core
lib.rslazy-attribute-core
version0.1.4
sourcesrc
created_at2023-10-30 21:20:20.475321
updated_at2023-11-02 17:21:58.878067
descriptionImplementation of the lazy macro
homepage
repositoryhttps://github.com/zerocore-ai/lazy-attribute
max_upload_size
id1019045
size9,482
Stephen Akinyemi (appcypher)

documentation

https://docs.rs/lazy-attribute

README

lazy-attribute

Crate Code Coverage Build Status License-Apache License-MIT Docs

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.

Usage

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

Caveats

  • lazy_* macros do not support functions with arguments. You will get an error telling you arguments are not supported.

Crate Features

  • async - Enables support for lazily evaluating async functions.
Commit count: 20

cargo fmt