14 releases (5 breaking)
new 0.6.1 | Jan 26, 2025 |
---|---|
0.6.0 | Jan 24, 2025 |
0.5.2 | Jan 24, 2025 |
0.4.1 | Jan 21, 2025 |
0.1.3 | Jan 20, 2025 |
#844 in Rust patterns
1,343 downloads per month
Used in 2 crates
(via stak-native)
14KB
341 lines
any-fn
Dynamically-typed functions via core::any::Any
in Rust.
Due to combinatorial explosion, the dynamically-typed functions support only up to 6 arguments... 🥲
Examples
Mutating a struct
use any_fn::{r#fn, value};
struct Foo {
foo: usize,
}
fn foo(x: usize, y: &mut Foo) {
y.foo = x;
}
let x = value(Foo { foo: 0 });
r#fn(foo).call(&[&value(42usize), &x]).unwrap();
assert_eq!(x.downcast_ref::<Foo>().unwrap().foo, 42);
Calling a function with unboxed, immutable reference, and mutable reference arguments
use any_fn::{r#fn, Ref, value};
fn foo(x: usize, y: &usize, z: &mut usize) {
*z = x + *y;
}
let x = value(0usize);
r#fn::<(_, Ref<_>, _), _>(foo)
.call(&[&value(40usize), &value(2usize), &x])
.unwrap();
assert_eq!(x.downcast::<usize>().unwrap(), 42);