any-fn

Crates.ioany-fn
lib.rsany-fn
version0.6.3
created_at2025-01-20 11:36:41.582819+00
updated_at2025-09-20 04:26:31.171131+00
descriptionDynamically-typed functions to represent any functions in Rust
homepage
repositoryhttps://github.com/raviqqe/any-fn
max_upload_size
id1523816
size17,238
Yota Toyama (raviqqe)

documentation

README

any-fn

GitHub Action Crate License

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

License

MIT

Commit count: 51

cargo fmt