Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ink-feather-org/const-closure-rs
Helpers for creating const callable closures.
https://github.com/ink-feather-org/const-closure-rs
Last synced: 2 days ago
JSON representation
Helpers for creating const callable closures.
- Host: GitHub
- URL: https://github.com/ink-feather-org/const-closure-rs
- Owner: ink-feather-org
- License: apache-2.0
- Created: 2022-09-13T16:42:07.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-14T22:44:38.000Z (14 days ago)
- Last Synced: 2024-12-23T17:48:06.289Z (5 days ago)
- Language: Rust
- Homepage:
- Size: 52.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# const-closure
[![docs.rs](https://docs.rs/const-closure/badge.svg)](https://docs.rs/const-closure)
[![crates.io](https://img.shields.io/crates/v/const-closure.svg)](https://crates.io/crates/const-closure)
[![rustc](https://img.shields.io/badge/rustc-nightly-lightgrey)](https://doc.rust-lang.org/nightly/std/)# THIS CRATE IS BROKEN - Archive Note
The last tested working rust version is `1.71.0-nightly (nightly-2023-04-18)`.
Most const traits have been removed from the standard library.
Once they are back this crate might make a return if it is still needed.## Description
This crate allows you to create types which represent closures in const contexts.
To do this simply create an instance of the provided closure helper: `ConstClosure`
with the associated `new` function.A closure helper instance gets the data to capture as a tuple of same ownership (Owned, Mut or ref) and the implementation function to execute.
The implementation function must be a `const fn` that gets the captured state (a tuple of: owned values for `FnOnce`, `&mut` for `FnMut` and `&` for `Fn`)
and a tuple representing the arguments of the closure.A closure helper instance returns the return value of the closure function on call.
## Example
```rust
#![feature(const_trait_impl)]
#![feature(const_mut_refs)] // Only required for the FnMut exampleuse const_closure::ConstClosure;
// FnOnce:
const _: () = {
const fn imp((state,): (i32,), (arg,): (i32,)) -> i32 {
state + arg
}
let cl = ConstClosure::new((5,), imp);
assert!(7 == cl(2));
};// FnMut:
const _: () = {
const fn imp((state,): (&mut i32,), (arg,): (i32,)) -> i32 {
*state += arg;
*state
}
let mut i = 5;
let mut cl = ConstClosure::new((&mut i,), imp);assert!(7 == cl(2));
assert!(8 == cl(1));
};// Fn:
const _: () = {
const fn imp((state,): (&i32,), (arg,): (i32,)) -> i32 {
*state + arg
}
let i = 5;
let mut cl = ConstClosure::new((&i,), imp);
assert!(7 == cl(2));
assert!(8 == cl(3));
assert!(6 == cl(1));
};
```Note: The `const_closure` macro has been removed in favour of the new generic based approach.
Authors
-------[raldone01](https://github.com/raldone01) and [onestacked](https://github.com/chriss0612) are the primary authors and maintainers of this library.
License
-------This project is released under either:
- [MIT License](https://github.com/ink-feather-org/const-closure-rs/blob/master/LICENSE-MIT)
- [Apache License (Version 2.0)](https://github.com/ink-feather-org/const-closure-rs/blob/master/LICENSE-APACHE)at your choosing.
### 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.