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
Used in di
43KB
810 lines
MetaFactory
Build value factory chains at runtime from lambdas and other sources.
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