Crates.io | metafactory |
lib.rs | metafactory |
version | 0.4.4 |
source | src |
created_at | 2014-12-08 21:46:54.370559 |
updated_at | 2015-12-11 23:54:29.779751 |
description | Rust library to chain together object factories. |
homepage | |
repository | https://github.com/Nercury/metafactory-rs |
max_upload_size | |
id | 491 |
size | 44,377 |
Build value factory chains at runtime from lambdas and other sources.
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>());
Put this in your Cargo.toml
:
[dependencies]
metafactory = "*"
And this in your crate root:
extern crate metafactory;
MIT