2 unstable releases
0.2.0 | Oct 12, 2024 |
---|---|
0.1.0 | Oct 8, 2024 |
#1206 in Rust patterns
9KB
107 lines
once-fn
This crate focuses on one simple thing: make a function runs only once. All subsequent calls will return the result of the first call.
Limitations
- Return type must satisfy:
- Implements
Clone
, or a reference points to a type that implementsClone
. - could not be generics type or
impl
clause.
- Implements
Example
use once_fn::once;
#[once]
pub fn foo(b: bool) -> bool {
b
}
assert!(foo(true)); // set the return value to `true`
assert!(foo(false)); // will not run this function twice; directly return `true`.
// allows ref:
#[once]
pub fn foo2(b: &bool) -> &bool {
b
}
for impl block:
use once_fn::once_impl;
struct Foo;
#[once_impl]
impl Foo {
#[once]
pub fn foo(b: bool) -> bool {
b
}
}
see tests for more examples.
Why not
cached::proc_macro::once
- does not support async fn
- does not support generics (in input)
- does not support reference (in return type)
- does not support use in impl block
fn-once
- Almost no docs; I don't know what it actually do.
- It can't even compile its example
MSRV
1.61.0 (nightly), 1.70.0 (stable)
todo
- support impl block
Dependencies
~255–710KB
~17K SLoC