| Crates.io | pfn |
| lib.rs | pfn |
| version | 0.1.0 |
| created_at | 2021-11-21 22:34:11.233449+00 |
| updated_at | 2021-11-21 22:34:11.233449+00 |
| description | Provide fn_trait's `call`, `call_mut`, and `call_once` on Stable Rust. |
| homepage | |
| repository | https://github.com/wishawa/pfn |
| max_upload_size | |
| id | 485488 |
| size | 6,972 |
Provide
fn_trait's
call,
call_mut, and
call_once
on Stable Rust for functions / closures with ≤ 12 arguments.
let closure = |x: i32, y: i32, z: String| {
println!("{}", z);
x + y
};
// Once the `fn_trait` feature has stabilized, you would do this.
let result = closure.call((5, 42, "Hello World"));
// For now, use PFn.
let result = closure.pfn_call((5, 42, "Hello World"));
// Here, Func can be a function or closure that takes any number of arguments (actually 1 - 12 arguments).
struct Runnable<Args, Func: PFnOnce<Args>> {
func: Func,
args: Args
}
impl<Args, Func: PFnOnce<Args>> Runnable<Args, Func> {
fn run(self) -> Func::PFnOutput {
(self.func).pfn_call_once(self.args)
}
}
let runnable = Runnable {
func: |mut x: String| {
x.push_str("!!!");
x
},
args: ("hello world".into(),)
};
assert_eq!(runnable.run(), "hello world!!!");