#lazy-static #async #lazily

macro async_static

A macro for declaring async lazily evaluated statics in Rust

2 releases

0.1.3 Feb 20, 2021
0.1.2 Feb 19, 2021
0.1.1 Feb 19, 2021
0.1.0 Feb 19, 2021

#12 in #lazy-static

Download history 28/week @ 2024-07-23 13/week @ 2024-07-30 4/week @ 2024-08-06 18/week @ 2024-08-13 50/week @ 2024-08-20 221/week @ 2024-08-27 413/week @ 2024-09-03 464/week @ 2024-09-10 321/week @ 2024-09-17 265/week @ 2024-09-24 140/week @ 2024-10-01 295/week @ 2024-10-08 66/week @ 2024-10-15 14/week @ 2024-10-22 19/week @ 2024-10-29 14/week @ 2024-11-05

135 downloads per month
Used in 5 crates (3 directly)

MIT/Apache

8KB
76 lines

Async Static

A macro for declaring async lazily evaluated statics in Rust.


Basic usage

dependencies

async_static = "0.1"
once_cell = "1"
# Only used in the current example
tokio = { version = "1", features = ["full"] }

src

use async_static::async_static;
use tokio::time::sleep;

async fn get_num() -> i32 {
    println!("hello world");
    sleep(Duration::from_millis(100)).await;
    123
}

async_static! {
    static ref FOO:i32 = get_num().await;
}

/// run print
/// ```
/// hello world
/// The result of the first call: 123
/// The result of the second call: 123
/// ```
#[tokio::test]
async fn test() {
    // The first call, print hello world
    let n = FOO.await;
    println!("The result of the first call: {}", n);

    // The second call, nothing print
    let n = FOO.await;
    println!("The result of the second call: {}", n);
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions

Dependencies

~1.5MB
~37K SLoC