#polyfill #variadic #fn-trait


Provide fn_trait’s call, call_mut, and call_once on Stable Rust

1 unstable release

Uses new Rust 2021

0.1.0 Nov 21, 2021

#519 in Rust patterns

Used in decurse

MPL-2.0 license

102 lines


crates.io crates.io Provide fn_trait's call, call_mut, and call_once on Stable Rust for functions / closures with ≤ 12 arguments.


Basic usage

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"));

Generalizing over functions with different number of arguments

// 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 {
let runnable = Runnable {
	func: |mut x: String| {
	args: ("hello world".into(),)
assert_eq!(runnable.run(), "hello world!!!");

No runtime deps