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

#15 in #factory

Download history 31/week @ 2024-09-20 19/week @ 2024-09-27 75/week @ 2024-12-06

75 downloads per month
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