#run-time #factory #reflection #constructor #invoke #lambda

nightly metafactory

Rust library to chain together object factories

19 releases (4 breaking)

Uses old Rust 2015

0.4.4 Jan 4, 2015
0.4.3 Jan 3, 2015
0.4.1 Dec 28, 2014
0.3.0 Dec 28, 2014
0.0.3 Dec 9, 2014

#11 in #invoke


Used in di

MIT license

43KB
810 lines

MetaFactory

Build value factory chains at runtime from lambdas and other sources.

Build Status

Quick example

use metafactory::{ metafactory, argless_as_factory, AsFactoryExt };

fn main() {
    // initialization

    let meta_sum = metafactory(
        |a: int, b: int| a + b
    );

    let meta_twice = metafactory(
        |val: int| val * 2
    );

    // plugging in

    let any_factory = meta_twice.new(vec![
        meta_sum.new(vec![
            argless_as_factory(3i),
            argless_as_factory(2i),
        ]).ok().unwrap()
    ]).ok().unwrap();

    // using

    let getter = any_factory.as_factory_of::<int>().unwrap();

    // note that "take" requires no arguments

    assert_eq!(getter.take().value, 12);
}

Offers primitive reflection for returned factory type and arguments:

let meta_int = metafactory(
    |arg: bool| i32
);

// it knows the source returns 32-bit int
assert!(meta_int.get_type().is::<i32>());

// it knows the argument is bool
assert!(meta_int.get_arg_types().get(0).unwrap().is::<bool>());

Usage

Put this in your Cargo.toml:

[dependencies]
metafactory = "*"

And this in your crate root:

extern crate metafactory;

Resources

License

MIT

Dependencies

~11KB